2013-05-01 187 views
2

我正在做一個跨數據庫AJAX調用dataType爲jsonp。我在URL中設置了Jsoncallback querystring參數。但是,回調函數根本沒有被調用,而是頁面被重定向到自身。jsonp回調函數沒有被調用

的AJAX調用基本上擊打點CMS服務,當我在瀏覽器直接測試它返回以下響應:

myfunction({'state':'MEL', 'plan':'true' }) 

這裏,「myfunction的」是我通過作爲Jsoncallback參數的值的字符串在URL

這裏是我的AJAX調用

$.ajax({ 
    url:"http://website.hostname.com/validatepostcode.dot?postcode="+encodeURIComponent(thepostcode)+ "&Jsoncallback=parseResponse", 
    dataType: "jsonp", 
    async: false, 
    crossDomain:true 
    }); 


function parseResponse(data) 
{ 
alert(data); 
} 

我缺少的AJAX調用任何參數?或者服務端可能有問題?

+0

的點CMS服務讀取我發送查詢字符串參數,並返回包裹在像myfunction的函數名JSONP格式的響應({「狀態」:「MEL」,「方案」:「真」}) – 2013-05-01 13:46:05

回答

1

$.ajax jQuery函數具有特定的配置選項,用於提供似乎從代碼中缺少的回調函數的名稱。

通過設置dataType: 'jsonp' jQuery的

增加一個額外的 「?回調=?」您網址的結尾指定回調

這是造成一個問題,因爲你也是在url增值的回調函數。

要覆蓋這一點,你可以添加jsonp選項其中:

覆蓋在JSONP請求的回調函數的名稱。這個值將被用來代替'callback =?'中的'回調'。部分查詢字符串在url中。

您也可以指定data作爲一個單獨的選項(參見Sending Data to the server),我也加入以下。

以下代碼應正確使用parseResponse()作爲回調函數。

$.ajax({ 
    url: 'http://website.hostname.com/validatepostcode.dot', 
    type: 'get', 
    data: {postcode: encodeURIComponent(thepostcode)}, 
    dataType: 'jsonp', 
    jsonp: 'parseResponse' 
}); 
+0

謝謝..我會嘗試它,讓你知道。 – 2013-05-01 16:01:23

+1

謝謝@andyb。它有助於。現在又多了一個問題。執行進入回調函數後,我試圖通過動態設置其action屬性來發布表單。這沒有發生。它總是重定向到自我。我將爲此提出單獨的帖子。 – 2013-05-02 04:52:23