2015-01-12 2 views
0

У меня есть следующий кодJQuery отложенный объект обратного вызова не стреляя

function get_hash(){ 
    id = $('#file_id').val() 
    deferred = $.ajax({ url: "/rest/hash_upload/", type: "GET", data: {file_id: id} }) 
    $.when(deferred).then(function(data){ 
     alert('executing') 
     $('#input_md5_checksum').val(data) 
    }) 
} 

Аякса вызывается и мой бэкенд возвращает хэш, как ожидалось. Однако метод отложенного обратного вызова не срабатывает. Может ли кто-нибудь увидеть, что я делаю неправильно?

Спасибо.

+3

Предположительно, поскольку запрос '. $ .ajax()' в некотором роде терпит неудачу. Либо ответ не «200 ОК», либо jQuery пытается проанализировать ответ и не может. Добавьте ['failFilter'] (http://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter) или обработчик' .fail() '(http: // api. jquery.com/deferred.fail/), чтобы узнать, сообщается ли об ошибке. (Боковое примечание: '$ .when()' на самом деле не требуется для одного 'отложенного', который будет иметь свой собственный' .then() ', который вы можете использовать.) –

+0

Спасибо. Это произошло потому, что у меня не было атрибута dataType: text, поэтому он, по-видимому, пытался разобрать json. – shaw2thefloor

+1

Исправьте меня, если я ошибаюсь, но '$ .when()' здесь избыточен. Вы можете просто использовать 'deferred.then (...)' или называть '.then()' непосредственно на результат '$ .ajax()', не предварительно сохраняя его в переменной. – JLRishe

ответ

1

Зачем устанавливать ваш запрос как переменную, а затем использовать when(), почему бы не просто использовать обычный вызов ajax?

 $.ajax({ 
      url: "/rest/hash_upload/", 
      type: "GET", 
      data: {file_id: id} 
     }).done(function(data){ 
      alert('executing'); 
      $('#input_md5_checksum').val(data); 
     }).fail(function(xhr, status, error){ 
      return ("Ajax failed: " + xhr.responseText); 
     }); 
+0

Обязательно объясните, что сделал ФП и что вы сделали по-другому. Это не большой ответ без объяснения причин. – Rimble

+0

@TomKriek Я отправил это случайно, это был только его код, отправленный повторно, и был в середине редактирования моего ответа. – Craicerjack

+0

Нет причин использовать $ .when или .then в этом случае, но, возможно, это могло бы быть представлено как комментарий. –