簡體   English   中英

使用JSONP時無法從Web服務獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM