2016-03-01 72 views
0

在更改下拉列表中的項目時,我應該通過jQuery進行AJAX調用。 (我用的是新功能的getJSON,它會自動將數據類型設置爲「JSON」,所以我沒有指定。)

我的代碼:

<script language="javascript"> 
$(document).ready(function() { 

    $('#mydropdown').change (function() { 
     var lookupPath = "/" + $(location).attr('pathname').split('/')[1] + "/lookup"; 
     var jsonData = '{\"lookupIdentifier\":\"MY_LOOKUP\",\"secondParam\":\"PARAM\"}'; 
     alert('JSON Data is: ' + jsonData); 

     var jqxhr = $.getJSON(lookupPath, jsonData).done(function(data) { 
      alert('AJAX Call Completed. Data: ' + JSON.stringify(data));  
     }).fail(function(d, textStatus, error) { 
      alert('Failed: ' + d + " textStatus: " + textStatus + " error: " + error); 
     }); 

首先,我驗證傳遞的是正確的,沒有語法問題的JSON字符串:

{"lookupIdentifier":"MY_LOOKUP","secondParam":"PARAM"} 

這將進入故障(),錯誤:

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data 

有什麼想法?

+0

你從哪裏得到JSON?難道你會得到[BOM](https://en.wikipedia.org/wiki/Byte_order_mark)? –

+1

在json之前尋找額外的字符。將瀏覽器開發工具請求的響應正文的100%複製到json驗證器中 – charlietfl

+0

也應該將對象不是字符串傳遞給'var jqxhr = $ .getJSON(lookupPath,jsonData)' – charlietfl

回答

0

不要自己編碼任何數據。 jQuery會這樣做,你不需要干涉。

通行證在數據作爲對象:

$(function() { 
    $('#mydropdown').change(function() { 
     $.getJSON("/" + location.pathname.split('/')[1] + "/lookup", { 
      lookupIdentifier: "MY_LOOKUP", 
      secondParam: "PARAM" 
     }).done(function(data) { 
      console.log('AJAX Call Completed. Data: ', data); 
     }).fail(function(jqXhr, textStatus, error) { 
      console.log('Failed', jqXhr, textStatus, error); 
     }); 
    }); 
}); 

無關,而是使用console.log()代替alert()

相關問題