Вопрос

Как использовать обратный вызов 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();
}});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top