我想執行下列AJAX調用(跨域):跨域AJAX調用來獲取JSON響應錯誤失敗,JSON格式正確
$.ajax({
type: 'GET',
url: url + "?callback=?",
contentType: 'application/json',
async: false,
jsonp: "callback",
dataType: 'jsonp',
success: function (json) {
alert("ok" + JSON.stringify(json));
},
error: function (json) {
alert("err" + JSON.stringify(json));
}
});
而且我得到這個警報消息:
這意味着代碼以錯誤方法結束。
如果我在Firefox或Chrome中檢查請求,則響應的JSON部分可用且格式明確。 是否有可能在錯誤方法中獲得JSON響應?或者你有什麼想法,爲什麼成功的方法沒有命中?
不幸的是,這不是我的服務器,所以我無法在服務器端實現任何更改。我使用http://jsonlint.com/來驗證JSON輸出,它是有效的。在瀏覽器中輸入相同的URL會正確返回JSON內容。
感謝很多提前, 我嘗試了幾種不同的方法,但仍然失敗上的錯誤方法,
[編輯]
所以,我用不同的方法打,始終得到同樣的錯誤。如果我將調用的錯誤部分改成這樣:
error: function (jqXHR, textStatus, ex) {
console.log(arguments);
alert(textStatus + "," + ex + "," + jqXHR.responseText);
}
然後我收到以下錯誤:
http://i.stack.imgur.com/ck6Sd.png
錯誤的複製粘貼的搜索引擎:
0: Object 1: "parsererror" 2: Error message: "jQuery11020553141210693866_1392367304225 was not called" stack: (...) get stack: function() { [native code] } set stack: function() { [native code] } proto: d callee: function (jqXHR, textStatus, ex) { length: 3 proto: Object
同樣的東西適用於上面,響應在瀏覽器中是可讀的,沒有問題。
EDIT2
我最後做的JSON調用舊的方式,將其嵌入到頁面:
script = document.createElement("script");
script.type = "text/javascript";
script.id = "resultJSON";
script.src = url;
$(".resultsOutput").append(script);
但我有麻煩檢索數據,腳本標籤似乎是空的。
未捕獲的SyntaxError:我的JSON得到一個錯誤的意外標記:
任何人能幫助我們嗎?我開始對這個問題感到絕望。看來問題在於JASON沒有使用方法封裝來返回。
[最後編輯]
所以,原來的服務器不支持CORS和返回的JSON不裹在一個JS的功能,所以這種做法是行不通的。我將不得不使用其他方法來檢索數據..感謝大家閱讀
安迪
看起來我倒過來了。服務器不會返回封裝到函數中的響應,而是調用函數本身,並且jQuery將在響應到達時調用瀏覽器內存中的函數。看到這個線程:http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain?rq=1 –
我試過你的第一個建議,刪除contentType屬性,但代碼行爲相同。對於你的其他問題,我只是嘗試了不同的方法,現在,這是我得到的最遠(否則由於我的問題的跨域部分,我得到了各種錯誤)。我會檢查你建議的線索,並讓你知道它是否有幫助。非常感謝你的時間,非常感謝。 – user3307231
我檢查了提到的鏈接,但是我找不到任何能幫助我的東西。自從嘗試了其他方法後,我看到了更新後的問題。 – user3307231