更新1:我還沒有弄清楚發生了什麼事情,但這肯定是我的項目的一個問題。在創建一個簡單的測試頁之後,我能夠驗證getJSON實際上是否返回了它應該的XHR對象。jQuery Ajax方法不返回XHR對象
UPDATE 2:哇,這很奇怪。在做了更多測試之後,我發現如果我指定「callback =?」參數在URL字符串XHR對象不正確地返回。但是,如果我沒有指定「callback =?」參數,XHR對象正確返回。問題是,我在調用JSONP服務,所以「callback =?」參數是必需的。
有關爲什麼會出現這種情況的任何想法?
更新3:以下是一些獨立代碼示例來說明問題。在第一個示例中,console.log(request)未定義。當我在第二個代碼示例中硬編碼回調參數時,console.log(request)是XHR對象。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
var request = $.getJSON('http://localhost?callback=?', function(data) {
});
console.log(request);
});
</script>
</body>
</html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
var request = $.getJSON('http://localhost?callback=callback', function(data) {
});
console.log(request);
});
</script>
</body>
</html>
UPDATE 4:每regilero的評論下面,我切換到使用$阿賈克斯方法,並通過一個數據對象傳遞的參數了。下面是請求的全部代碼:
var request = $.ajax({
data: {
f: 'json',
geometry: '{x:44.203642291681845,y:-95.79085806500001}',
geometryType: 'esriGeometryPoint',
imageDisplay: '727,500,96',
layers: 'all',
mapExtent: '-179.462733065,16.116769346042226,-51.669764315000016,71.57609342040729',
returnGeometry: false,
tolerance: 10
},
dataType: 'jsonp',
success: function(data) {
console.log(data);
},
url: 'http://server.arcgisonline.com/ArcGIS/rest/services/Specialty/Soil_Survey_Map/MapServer/identify'
});
console.log(request);
如果我指定「數據類型:‘JSONP’」的配置對象,執行console.log(請求)再次定義。但是,如果我指定「dataType:'json'」,則console.log(request)是XHR對象。
此行爲與我使用$ .getJSON快捷方式時遇到的情況一致。
原來的問題
%的計算器問題/答案在這裏:Abort Ajax requests using jQuery和一些其他問題/本網站和其他人的答案,jQuery的Ajax的方法應該返回XHR對象。
但是,當我運行下面的代碼時,請求是「未定義的」。
var request = $.getJSON(url, function(data) {
console.log(data);
});
console.log(request);
我錯過了jQuery的變化嗎?我正在使用1.4.4。
根據手冊,它應該還是回到一個XHR對象。 http://api.jquery.com/jQuery.getJSON/也許請求失敗? – 2011-01-07 21:31:19
@皮卡:不,請求絕對不會失敗。 – 2011-01-07 21:38:33
對,對不起。我誤解了這個問題。 – Anders 2011-01-07 21:40:05