2011-08-24 3 views
0

Есть ли способ получить доступ к данным, которые я получаю во время успеха, поэтому я могу использовать его во время полного обратного вызова?Доступ к данным из ajax успеха завершен?

Возможно, есть способ, которым я могу назначить несколько функций успеха?

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

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

CallServer = function(options) { 
    if(options.success) { 
    var customSuccess = options.success; 
    options.success = function(data) { 
     defaultSuccess(data); 
     customSuccess(data); 
    } 
    } 
    $.extend(true, defaults, options); 
    $.ajax(defaults); 
} 

EDIT: Я нашел мой ответ. Я не понимал, что xhr хранит данные как responseText. поэтому следующее получает мне то же самое, что возвращается как «данные» об успехе.

complete: function(xhr){dosomething(xhr.responseText);} 

и все! Спасибо

+0

Поскольку вы, кажется, уже используете jQuery, прочитайте функциональность jQuery [Deferred] (http://api.jquery.com/category/deferred-object/). Вы можете добавить несколько обратных вызовов с помощью метода '.done()'. – nnnnnn

+0

Спасибо, что привлекли это к моему вниманию. Я могу представить, что это полезно позже в моем проекте. К сожалению, он, похоже, не в состоянии помочь получить возвращаемые данные вызова ajax в него ... – Zholen

ответ

0

Я нашел мой ответ. Я не понимал, что xhr хранит данные как responseText. поэтому следующее получает мне то же самое, что возвращается как «данные» об успехе.

complete: function(xhr){dosomething(xhr.responseText);} 

и все! Спасибо

1

В jQuery, обратный вызов успеха принимает данные в качестве первого аргумента.

Из документации JQuery (http://api.jquery.com/jQuery.ajax/) список аргументов для обратного вызова успеха есть:

успеха (данные, textStatus, jqXHR)

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

Может быть, вы могли бы использовать систему как:

function customSuccess(data) { 
    if (situation == "one way") { 
     firstFunction(data): 
    } 
    else if (situation == "another way") { 
     secondFunction(data); 
    } 
} 
+0

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

+0

В моем примере он передается отправленной функции в качестве аргумента. Это то, что вы имеете в виду? – Wyatt

Смежные вопросы