beforeSend в $ .getJSON
-
06-07-2019 - |
Вопрос
Как использовать обратный вызов beforeSend
в $. getJSON
(междоменный). Р>
В частности, $. getJSON
это вызов службы YQL.
Как
выберите * из HTML, где url = & # 8221; http://www.yahoo.com & # 8221;
Решение
Единственная цель 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
}
Другие советы
$. getJSON - это просто краткая функция для функции $ .ajax
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 просто используют $ .ajax вроде:
jQuery.ajax({
url: url,
dataType: "json",
beforeSend: function(){
$('.loading').show();
}
});
Другой вариант - использовать $ .ajaxSend и $. ajaxComplete , но эти функции будут вызываться до и после каждого вызова ajax.
Я думаю, что вы хотите использовать $ .ajaxStart () и $. ajaxStop () . Это позволит вам показать и скрыть загрузочный GIF-запрос на запросы AJAX / JSON. Это также делает правильно, если происходит несколько запросов 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();
}});