2015-07-13 3 views
-2

Для функции jQuery, в чем причина использования .success()? Начальная функция будет выполняться с успехом? Так вы просто не выполняете дважды, когда включаете .success()?Зачем использовать .success() с getJSON?

$.getJSON("ajax/test.json", function(data) { 
//this will execute upon success 
}) 
.success(function() { 
    //doesn't this do what the above is doing? 
}) 
+0

FYI, 'успех () 'метод устарел –

+0

Я не думаю, что видел это, вы видели это где-то? возможно, он использовался в ошибке/непонимании – atmd

ответ

1

Если смотреть в изоляции и просто счастливый сценарий, да: они делают то же самое. Обратный вызов в качестве последнего аргумента $.getJSON вызывается независимо от результата запроса.

.success() Способ сделать это вдохновлен обещаниями. Вы можете прочитать о них подробнее здесь: https://promisesaplus.com

Обещания устанавливают лучший интерфейс для составления многих асинхронных операций, а также для обработки сценариев, которые не являются успешными.

Вы должны использовать .then() вместо .success(): https://api.jquery.com/deferred.then/

+0

Ссылка на API getJSON (http://api.jquery.com/jquery.getjson/) также указывает на .done(), .fail(), .always(), но для JSONP. Я не использую JSONP. Но эти методы все еще работают. Это проблема, если я использую их в любом случае с getJSON()? Они не упоминают. Then(), кстати. – 4thSpace

+0

getJSON возвращает отложенное, и он поддерживает .then(): https://api.jquery.com/category/deferred-object/, однако .done() и .fail() тоже отлично подходят! – franciscod

1

Вам не нужна функция успеха в этом случае, вы уже определяете функцию, которая будет выполнена с успехом.

0

Вы можете видеть, когда ваш запрос succesfull.You может увидеть сообщение в консоли и тому подобное ... я не знаю

1

Они были разработаны для выполнения одной функции в каждом случае. Случай успеха, случай ошибки и общая функция, которая всегда выполняется.

Но как stated here и here, .success() устарел. См:

Deprecation Извещения: jqXHR.success(), jqXHR.error(), и jqXHR.complete() обратный вызов нежелательны из JQuery 1.8. Чтобы подготовить код для их возможного удаления, вместо этого используйте jqXHR.done(), jqXHR.fail() и jqXHR.always().

Используя этот подход, вы имеете одну функцию для выполнения в случае успеха, другой для выполнения в случае выхода из строя, а окончательный один выполнить в зависимости от того случая:

// Assign handlers immediately after making the request, 
// and remember the jqXHR object for this request 
var jqxhr = $.ajax("example.php") 
    .done(function() { 
     alert("success"); 
    }) 
    .fail(function() { 
     alert("error"); 
    }) 
    .always(function() { 
     alert("complete"); 
    }); 

// Perform other work here ... 
// Set another completion function for the request above 
jqxhr.always(function() { 
alert("second complete"); 
}); 
Смежные вопросы