jfriend00..
13
对于不习惯使用异步操作的人来说,这是一个非常常见的问题.它需要您重新考虑如何构造代码,因为您不能只以正常的顺序样式编程.
您不能从异步ajax调用的成功处理程序返回值.ajax cll早已完成并已经返回.从成功处理程序返回一个值只是进入ajax代码的内容,而不是返回到代码中.
相反,您必须在成功处理程序或从成功处理程序调用的函数中使用ajax调用的结果.
在您的特定情况下,您的getAverageRating()函数可能需要使用回调函数,并且在检索到评级时,将调用回调函数.它不能返回值,因为它会立即返回,然后在将来的某个时间返回,ajax调用完成,并且使用实际数据调用ajax函数中的成功处理程序.
function prepareDocument() {
getAverageRating(1, function(data) {
alert(data);
});
}
function getAverageRating(pageId, fn) {
$.ajax({
url: "../services/rating.ashx?action=getAverageRating&pageId=" + pageId,
dataType: "text",
type: "GET",
data: {},
error: function (err) {
displayDialogBox("Error", err.toString());
},
success: function (data) {
fn(data);
}
});
}