jquery – 创建一个通用的ajax函数

可能重复:
jQuery Ajax总是返回“undefined”?

我正在尝试提出一个通用的jquery ajax函数,它接受url&parameters并返回结果。 我试图避免使用async:false因为它会锁定浏览器。 如果我在ajax调用中使用success回调,由于计时问题,返回的数据为空(成功不会等到数据返回)。 如果我使用complete ,则在LoadPersons方法中, LoadPersons对象仍为null,因为它不等待从ajax调用返回数据。 如果在complete回调中发出alert(persons) ,我得到[object][Object]所以我得到了数据。 我该如何“解决”这个问题? 我在说感觉吗? 理想情况下,我希望在这样做的同时显示“loading ..”图像。

这是我的代码 –

   $(function() { var persons; var urlGetPersons = "Default.aspx/GetPersons"; LoadPersons(); function LoadPersons() { persons = CallMethod(urlGetPersons, { }); if (persons != null) { // do something with persons. } } function CallMethod(url, parameters) { var data; $.ajax({ type: 'POST', url: url, data: JSON.stringify(parameters), contentType: 'application/json;', dataType: 'json', success: function(result) { data = result.d; }, // use success? complete: function(result) { data = result.d; } // or use complete? }); return data; } });  

这就是我对“generics”的想法 – 但它仍然是异步的:

 function CallMethod(url, parameters, successCallback) { //show loading... image $.ajax({ type: 'POST', url: url, data: JSON.stringify(parameters), contentType: 'application/json;', dataType: 'json', success: successCallback, error: function(xhr, textStatus, errorThrown) { console.log('error'); } }); } CallMethod(url, pars, onSuccess); function onSuccess(param) { //remove loading... image //do something with the response } 

我知道我之前已经找到了[object] [Object] ….你确定你的应用程序正在返回json吗? 如果没有,Json.NET让它变得非常简单。 您可能还需要调用$ .parseJSON。

$ .ajax是一个通用的jQuery函数。

你想做这样的事情:

 $(function() { function LoadPersons(data) { // do something with data } $.ajax({ type: 'POST', url: url, data: JSON.stringify(parameters), contentType: 'application/json;', dataType: 'json', success: function(result) { // do something with persons (data) // eg LoadPersons(data); } }); }); 

以文本forms:

你的ajax成功应该是在成功返回数据后负责处理数据的一点。 您的上一个方法尝试在必须完成AJAX方法之前返回数据。 您可以直接在$(function(){..})中添加$ .ajax方法,以便在页面加载时调用它。

另外,我建议使用Firebug之类的工具来检查AJAX调用的输出/响应。