[英]Unable to read data from AJAX (dataType:“jsonp”) call to web service
[英]Unable to get data from web service while using JSONP
我正在嘗試使用JSONP進行Web服務調用。 當我使用JSON調用服務時,它運行良好。 這是JSON的代碼:
$.ajax({
type:defaultOpt.type,
contentType: "application/json; charset=utf-8",
dataType: defaultOpt.dataType,
url: defaultOpt.url,
data: defaultOpt.data,
success: defaultOpt.successCallback,
error: defaultOpt.errorCallback,
async: defaultOpt.asyn
});
但是,當我使用JSONP調用同一服務時,響應中沒有任何信息。 這是使用JSONP進行呼叫的代碼:
$.ajax({
dataType: 'jsonp',
data: defaultOpt.data,
url: defaultOpt.url,
success: function (data) {
alert('Success');
},
error: function (data) {
alert("Error");
}
});
這是我使用JSONP時收到的字符串化響應。
{"readyState":4,"status":200,"statusText":"success"}
它顯示成功,但是我沒有從Web服務獲得響應數據。
您的服務器可能不支持JSONP。 然而。 如果您控制服務器,則可以自己添加此支持。
JSONP的想法是瀏覽器以javascript而不是Ajax數據的形式加載並執行它。 因此,要傳遞數據,響應需要調用回調函數並將數據作為參數傳遞。 響應可能如下所示:
callback({"readyState":4,"status":200,"statusText":"success"});
您的網站當然需要指定該回調函數,但是我認為JQuery會自動為您生成此函數,並讓該回調函數調用您的成功函數。 我對此不太確定,因此請檢查文檔。 當然,服務器必須偵聽callback參數,因此它將名稱用於包裝數據的函數調用。
您可能會說,JSONP是一個非常丑陋的hack。 所有現代瀏覽器都支持一種更好的跨域調用解決方案,該解決方案是在服務器的響應中添加一個Accept-Control-Allow-Origin
標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.