如何在$.getJSON
(跨域)中使用beforeSend
回調。
更具體地說$.getJSON
是呼叫的是YQL服務 像
SELECT * FROM HTML,其中 URL =」 http://www.yahoo.com」
如何在$.getJSON
(跨域)中使用beforeSend
回調。
更具體地說$.getJSON
是呼叫的是YQL服務 像
SELECT * FROM HTML,其中 URL =」 http://www.yahoo.com」
beforeSend的唯一目的是在原始XHR對象來獲取(通常爲在其上設置HTTP頭)。你不需要它來踢開紡紗廠之類的東西。這裏(從@petersendidit)此代碼:
jQuery.ajax({
url: url,
dataType: "json",
beforeSend: function(){
$('.loading').show();
}
});
不如這樣寫的:
$('.loading').show();
jQuery.ajax({
url: url,
dataType: "json"
});
這意味着,除非你需要在jQuery.ajax任何高級選項,你的原計劃使用jQuery。 getJSON就好了。所以你說你想要顯示一個加載GIF,只要做到這一點,忘記beforeSend
。
jQuery(".someSpinnerImage").show();
jQuery.getJSON("http://www.somedomain.com/someurl", function(data) {
jQuery(".someSpinnerImage").hide();
// Do something with data
}
我想你想使用$.ajaxStart()和$.ajaxStop()。這些將允許您顯示並隱藏ajax/JSON請求中的加載gif。如果有多個Ajax請求正在進行,它也是正確的。
$ .getJSON只是一個簡捷功能到$就功能
get: function(url, data, callback, type) {
// shift arguments if data argument was ommited
if (jQuery.isFunction(data)) {
callback = data;
data = null;
}
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
getJSON: function(url, data, callback) {
return jQuery.get(url, data, callback, "json");
},
所以,如果你需要做任何更多的話,基本的getJSON調用只需使用$就喜歡:
jQuery.ajax({
url: url,
dataType: "json",
beforeSend: function(){
$('.loading').show();
}
});
另一種選擇是使用$.ajaxSend和$.ajaxComplete函數,但這會使這些函數在每個ajax調用之前和之後被調用。
我認爲您使用JSONP從另一臺服務器調用腳本。 我做了功課,JSONP調用中沒有beforeSend事件。
正確的方法是使用beforeSend回調,因爲完整的回調不叫上緩存的查詢,因爲一個請求是不是在這種情況下發送,因此beforeSend也不會被調用。換句話說,如果你在創建你的$ .Ajax請求之前顯示一個加載圖像,並且在完成該請求之前依靠隱藏它,如果查詢被緩存,你的加載圖像將被卡在「show」上。
所以這是正確的方法;
$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
$('.loading').show();
},
success: function(data) {
// Do stuff...
},
complete: function() {
$('.loading').hide();
}});
準確地做什麼? – tvanfosson 2009-11-28 14:14:18
要顯示加載gif ... – 2009-11-28 14:51:48
爲什麼不只是顯示加載gif ...然後調用getJSON? – James 2009-11-28 15:37:40