У меня есть следующий код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)
})
}
Аякса вызывается и мой бэкенд возвращает хэш, как ожидалось. Однако метод отложенного обратного вызова не срабатывает. Может ли кто-нибудь увидеть, что я делаю неправильно?
Спасибо.
Предположительно, поскольку запрос '. $ .ajax()' в некотором роде терпит неудачу. Либо ответ не «200 ОК», либо jQuery пытается проанализировать ответ и не может. Добавьте ['failFilter'] (http://api.jquery.com/deferred.then/#deferred-then-doneFilter-failFilter-progressFilter) или обработчик' .fail() '(http: // api. jquery.com/deferred.fail/), чтобы узнать, сообщается ли об ошибке. (Боковое примечание: '$ .when()' на самом деле не требуется для одного 'отложенного', который будет иметь свой собственный' .then() ', который вы можете использовать.) –
Спасибо. Это произошло потому, что у меня не было атрибута dataType: text, поэтому он, по-видимому, пытался разобрать json. – shaw2thefloor
Исправьте меня, если я ошибаюсь, но '$ .when()' здесь избыточен. Вы можете просто использовать 'deferred.then (...)' или называть '.then()' непосредственно на результат '$ .ajax()', не предварительно сохраняя его в переменной. – JLRishe