2017-04-16 17 views
0

我正在請求一些JSON的自動完成功能。不幸的是,JSON是用一個html span標籤包裝的。發生這種情況是由於在VB中編寫的後端庫很差,這在接下來的幾個月內並未由運營商更改。所以我必須以另一種方式擺脫html span標籤。這裏是我的JS電話和迴應:jQuery JSON響應封裝在HTML

module.props.functions.ajaxSearchon = function (currVal) { 
    // Search on Type 
    $.ajax({ 
     url: module.props.apiURLs.searchOnType + '?query=' + currVal + '&lang=' + module.props.lang, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { 
     module.state = { 
      searchResult: result, 
      searchQuery: currVal 
     }; 
     }, 

     error: function (xhr, status, error) { 
     module.state = $.extend(module.state, { 
      searchResults: 'no results found' 
     }); 
     console.log("error", module.state); 
     }, 

     complete: function() { 
     module.props.functions.refreshSearchResults(); 
     } 
    }) 
    }; 

它作品反應很好,形成良好的JSON。但是,我的迴應是這樣的:

<span id="fromContext"> 
{ 
    "results": [ 
    { 
    "headline": "headline text", 
    "summary": " <em>summary</em> result text", 
    "url": "/url/to/page", 
    "image": { 
     "url": "/media.jpg", 
     "alt": "media alt text" 
    }, 
    "count": "" 
    }, 
    { 
    "headline": "empty object" 
    } 
    ], 
"hasmore": true 
} 
</span> 

所以,我將能夠探測範圍(因爲它有一個ID),但我不知道如何訪問與Ajax請求的整個響應的JSON部分。我認爲這個主要問題是,ajax調用導致錯誤,因爲響應不是JSON ... 任何想法如何解決這個問題?

回答

0

你可以改變ajax.dataType屬性爲 「文本」,並根據contentType爲 「text/plain的」

contentType: "text/plain; charset=utf-8", 
    dataType: "text", 

和響應字符串轉換爲jQuery對象

const $responseObject = $(response); 

,然後你可以用

let text = $responseObject.text(); 

訪問有效的JSON,並進一步對其進行處理。