2

我正在调用一个使用 ajax 获取值的函数,如何将此值返回给调用函数:
我的 ajax 调用函数是:

function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         return result;
      }
   });
}

我必须将此结果值返回给调用函数,即:

function setAdvDetail(advID){
var status = getStatusOfAdv(advID);
alert(status);
}
4

4 回答 4

2

$.ajaxasync调用,getStatusOfAdv 函数将在成功之前返回,您可以从成功调用函数并将结果传递给它。

function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         callYourFunction(result);
      }
   });
}

function callYourFunction(result)
{

}
于 2013-03-13T09:10:05.783 回答
1

$.ajax()调用是异步的,因此getStatusOfAdv()在 ajax 调用完成之前返回。因此,您将不得不重组您的代码,以便所有使用异步函数结果的代码要么在 ajax 成功处理程序中,要么从该处理程序调用。

您不能制作像 一样的同步函数getStatusOfAdv(),在其中使用异步调用,然后在返回时getStatusOfAdv()返回值。它无法完成,因为getStatusOfAdv()在异步 ajax 调用完成之前很久就返回了,因此返回值何时返回尚不清楚。

javascript 中的典型设计模式是在异步操作完成且数据可用时调用的回调函数中完成需要答案的工作:

function getStatusOfAdv(advID, fn){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         fn(result);
      }
   });
}

function setAdvDetail(advID){
    getStatusOfAdv(advID, function(status) {
        alert(status);
        // any other code that uses the status goes here
    });
    // the status is NOT known here because the asynch function has
    // not yet completed
}
于 2013-03-13T09:10:08.923 回答
0

试试这个

    function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         alert(result);
      }
   });
}

毕竟这是你在ajax函数调用之后所做的事情

于 2013-03-13T09:13:05.313 回答
0

你可以使异步为假..

尝试

function getStatusOfAdv(advID){
var Result;
$.ajax({
  url:baseURL+"/admin/advertisers/get.adv.status.php",
  data:"param="+escape(advID),
  dataType:"html",
  cache:"false",
  async:"false"
  success:function(result){

     Result=result;
  }
});
return Result;
}

但是将 async 设置为 false 并不是一个好习惯。

于 2013-03-13T09:24:40.433 回答