我正在尝试提出一个通用的jquery ajax函数,该函数使用url&参数并返回结果。我试图避免使用async:false
,因为它锁定了浏览器。如果我在ajax调用中使用success
回调,由于时间问题,返回的数据为空(成功不会等到数据返回)。如果我使用complete
,则persons
对象在LoadPersons
方法中仍为空,因为它不等待从ajax调用返回数据。如果在alert(persons)
回调中放置complete
,我会收到[object][Object]
,这样我就会收到数据。我该如何“解决”这个问题?我在说感觉吗?理想情况下,我还希望在这样做时显示“loading ..”图像。
这是我的代码 -
<script type="text/javascript">
$(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;
}
});
</script>
答案 0 :(得分:15)
这就是我对“通用”的想法 - 但它仍然是异步的:
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
}
答案 1 :(得分:0)
我知道我之前已经找到了[object] [Object] ....你确定你的应用程序正在返回json吗?如果没有,Json.NET让它变得非常简单。您可能还需要调用$ .parseJSON。
答案 2 :(得分:0)
$ .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)
// e.g. LoadPersons(data);
}
});
});
以文本形式:
你的ajax成功应该是在成功返回数据后负责处理数据的部分。您之前的方法尝试在必须完成AJAX方法之前返回数据。您可以直接在$(function(){..})中添加$ .ajax方法,以便在页面加载时调用它。
另外,我建议使用Firebug之类的工具来检查AJAX调用的输出/响应。