异步AJAX调用问题

时间:2010-10-04 17:52:07

标签: jquery asynchronous

我有一个jquery Ajax调用函数,我用它来提交表单到数据库进行保存。 还可以使用它从服务器获取数据并向用户显示。 当我发布\ save表格数据时,我必须向用户显示帖子的结果是否有错误。

如果我在同步模式下运行,一切正常。如果我想要的话,我会在使用这种方法发布后得到数据。

但似乎无法在异步模式下工作。

如何将数据传回给调用者? Web服务正确返回数据。 看到我有的警报()。它向我显示了数据。

如何获取数据并向用户显示并发布数据并以异步模式向用户显示结果? 我是否需要创建2个单独的函数,一个用于获取,另一个用于发布?

这是功能:

function MakeAjaxCall(svr, webmethod_name, op, btn, rslt, bGetData) {
   var data = "";
   var args = '';
   var l = arguments.length;
   if (l > 7) { for (var i = 7; i < l - 1; i += 2) { if (args.length != 0) args += ','; args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"'; } }

   var surl = "http://<myserver>/" + svr + '.aspx';
   $.ajax({
      type: "POST",
      async: (op == "sync") ? false : true,
      url: surl + "/" + webmethod_name,
      data: "{" + args + "}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function ShowSuccess(res) {
         //alert('dfx res:'+res.d);//THIS SHOWS THE DATA FROM SQL CALL FINE
         data = res.d;
      },
      fail: function ShowFail(xhr) {         
         data = "ERROR";
      }
   });
}

1 个答案:

答案 0 :(得分:3)

添加回调函数?如,

function MakeAjaxCall(svr, webmethod_name, op, btn,
                      rslt, bGetData, callbackFunction) {
   //removed for brevity

   var surl = "http://<myserver>/" + svr + '.aspx';
   $.ajax({
      //removed for brevity
      success: function ShowSuccess(res) {
         //pass the data to the callbackFunction
         callbackFunction(res.d);
      },
      //etc.
   });

然后将函数名称(或匿名函数)传递给MakeAjaxCall函数,如下所示:

//anonymous function
MakeAjaxCall(svrVal, somewebmethod_name, opVal, btnVal,
                      rsltVal, bGetDataVal, function(data) { alert(data); });

//named function
MakeAjaxCall(svrVal, somewebmethod_name, opVal, btnVal,
                      rsltVal, bGetDataVal, alert)