2015-03-27 2 views
0

допустит у меня есть простая функция:Как вернуть данные в jQuery Ajax?

function test(url){ 
var AjaxCall = $.ajax({ 
     type: GET, 
     url: url, 
     data: {}, 
     success: function(data,status,xhr){ 
      return xhr 
     }, 
     error: function(xhr,e){ 
      return xhr 
     } 
}); 


    if(xhr.status === 200)console.log('success'); 


} 

Так что я хочу, чтобы обработать ошибки внутри функции не после его вызова и добавления обратного вызова в вызове для лечения тех ошибки, например, это возможно ?

+0

Я думаю, что вы это сделаете, если я правильно понял, в массиве, который вы проходите там; передайте анонимную функцию по ошибке и успеху (как вы это делаете) и обрабатываете все, что хотите, –

+0

да, но в случае успеха, если я делаю 'return xhr', а затем при вызове функции для выполнения var x = test (url); console.log (x); 'иметь результаты; – Abude

+0

Почему бы просто не переместить оператор if в обратный вызов успеха? –

ответ

1

Если вы используете JQuery ниже, чем 1.8, да, можно, установив async = false

function test(url){ 
var AjaxCall = $.ajax({ 
     type: GET, 
     url: url, 
     async : false 
     data: {}, 
     success: function(data,status,xhr){ 
      return xhr 
     }, 
     error: function(xhr,e){ 
      return xhr 
     } 
}); 
} 

Пожалуйста, обратите внимание, что это является устаревшим, и по уважительной причине

По JQuery 1.8, использование async: false с jqXHR ($ .Deferred) - устарел; вы должны использовать параметры успешного завершения/ошибки/завершения обратного вызова вместо соответствующих методов объекта jqXHR, таких как jqXHR.done() или устаревший jqXHR.success().

http://api.jquery.com/jquery.ajax/

function test(url){ 
    var AjaxCall = $.ajax({ 
      type: GET, 
      url: url, 
      data: {}, 
      complete: function(xhr, status){ 
       if(xhr.status === 200)console.log('success'); 
      } 
    }); 
} 

И нет, вы не можете вернуть значение из вашей функции с помощью этого метода. Это не так, как работает асинхронный процесс. Если вы хотите вернуться, вам нужно установить async = false, и этот вид поражения будет использоваться для использования ajax.

+0

yep, я знал это, но есть ли другое решение? – Abude

+0

Да, решение есть «вы должны использовать параметры успеха/ошибки/полного обратного вызова вместо соответствующих методов объекта jqXHR, таких как jqXHR.done() или устаревший jqXHR.success()." – Quannt

+0

Вы можете дать фрагмент этого сообщения? – Abude

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