beforeSend в $ .getJSON - PullRequest
       27

beforeSend в $ .getJSON

11 голосов
/ 28 ноября 2009

Как использовать beforeSend обратный вызов в $.getJSON (междоменный домен).

Более конкретно $.getJSON - это вызов службы YQL Нравится

выберите * из HTML, где URL =»http://www.yahoo.com

Ответы [ 5 ]

33 голосов
/ 29 ноября 2009

Единственная цель 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
}
6 голосов
/ 29 ноября 2009

$. 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.

1 голос
/ 16 октября 2014

Правильный метод заключается в использовании обратного вызова beforeSend, поскольку полный обратный вызов не вызывается в кэшированных запросах, поскольку в этом случае запрос не отправляется, поэтому beforeSend также не вызывается.

Другими словами, если вы показываете загрузочное изображение перед созданием запроса $ .Ajax и полагаетесь на его скрытие в ходе выполнения этого запроса, если запрос кэшируется, ваше загрузочное изображение будет зависать на «show».

Так что это правильный метод;

$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
    $('.loading').show();
},
success: function(data) {
    // Do stuff...
},
complete: function() {
    $('.loading').hide();
}});
1 голос
/ 20 июля 2010

Я думаю, что вы используете JSONP для вызова скрипта с другого сервера. Я сделал свою домашнюю работу, и при вызове JSONP не было события beforeSend.

1 голос
/ 28 ноября 2009

Я думаю, вы хотите использовать $. AjaxStart () и $. AjaxStop () . Это позволит вам показать и скрыть загрузочный GIF-запрос на запросы AJAX / JSON. Это также делает правильно, если происходит несколько запросов ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...