JS: Вернуть результат из вложенной функции успеха ajax - PullRequest
4 голосов
/ 23 марта 2011

Как мне вернуть результат вложенного вызова ajax как результат родительской функции?

//Declaring the function
var myFunction = function(myData){  
  $.ajax({
  type:'post',
  url:"/ajaxPage.php",
  data:{data:myData},
  success:function(r){
  return r;
  });
}

//Calling the function
var theResult = myFunction(myData);

Я хочу, чтобы переменная 'theResult' содержала содержимое вызова ajax.

Ответы [ 4 ]

6 голосов
/ 23 марта 2011

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

 //Declaring the function

var myFunction = function(myData, callback){  
  $.ajax({
  type:'post',
  url:"/ajaxPage.php",
  data:{data:myData},
  success:function(r){
    callback(r);
  });
}


//Calling the function
var theResult = myFunction(myData, function(res) {
    // deal with it..
});
3 голосов
/ 16 мая 2012

Если вы используете jQuery, вам определенно следует использовать $.Deferred() и Promises/A.Я сделал это более многословным, что вам действительно нужно продемонстрировать некоторые функции.$.ajax само по себе уже возвращает $.Deferred().promise(), так что вы можете просто исключить дополнительный шаг, если вам нужно выполнить только один запрос XHR (см. Нижний пример).удобно, когда у вас есть несколько вложенных запросов XHR и вы хотите вернуть ответ на самый внутренний вызов: deferredResponse.resolve(innerResponse).Вот простая версия.

//Declaring the function
var myFunction = function(myData){
  return $.ajax({
    type:  'post',
    url:   '/ajaxPage.php',
    data: {'data': myData}
  });
}

//Calling the function
myFunction(myData).done(function(response){
  var theResult = response;
});
1 голос
/ 23 марта 2011

Попробуйте это:

var myFunction = function(myData){  
  $.ajax({
  type:'post',
  url:"/ajaxPage.php",
  data:{data:myData},
  success:function(r){
       return arguments.callee(r);
  });
}

//Calling the function
var theResult = myFunction(myData);
1 голос
/ 23 марта 2011

Вам нужно будет сделать ваш AJAX-вызов синхронным (не асинхронным, что по умолчанию).

Примерно так:

//Declaring the function
var myFunction = function(myData){
  var returnValue = null;
  $.ajax({
  type:'post',
  async: false,
  url:"/ajaxPage.php",
  data:{data:myData},
  success:function(r){
  returnValue = r;
  });

  return returnValue;
}

//Calling the function
var theResult = myFunction(myData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...