2010-10-04 103 views
1

我有一个jQuery的Ajax调用函数,我用它来提交表单以保存数据库。 也可以使用它从服务器获取数据并向用户显示。 当我发布\保存表单数据时,我必须向用户显示帖子的结果是否有错误。异步AJAX调用问题

如果我以同步模式运行,一切正常。如果我想获得数据,或者使用这种单一方法发布后获得结果。

但它似乎不工作在异步模式。

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

如何获取数据并显示给用户并发布数据并在异步模式下向用户显示结果? 我是否需要创建两个独立的函数,一个用于获取和其他帖子?

下面是函数:

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"; 
     } 
    }); 
} 
+0

它在哪里失败?你看过你的控制台输出,看它是否到达数据库?你做了什么其他的调试? – JasCav 2010-10-04 17:55:34

+0

我得到的数据很好。我如何返回给调用者? – kheya 2010-10-04 17:59:20

+0

@Proja在成功回调运行后,您如何知道数据未正确设置到您的'data'变量?或者那不是你想要达到的目标? – bzlm 2010-10-04 18:16:06

回答

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) 
+0

这将如何将数据返回给调用者js方法? – kheya 2010-10-04 18:10:52

+0

我的意思是你应该把调用方法分解成一个调用方法和一个回调方法。调用者执行所有操作直到执行'MakeAjaxCall',并且回调方法在成功时被调用,并传递它完成所有事情所需的数据。 – jball 2010-10-04 18:14:41

+0

所以当我打电话给MakeAjaxCall()时,你要求传递一个函数作为回调函数。 – kheya 2010-10-04 18:23:36