从jquery ajax调用中分配变量返回undefined

时间:2013-06-10 00:03:04

标签: jquery ajax callback return

我是jquery的新手,我试图在ajax调用之后为变量赋值,但它返回undefined。我的代码如下:

function prepareDocument() {
var a = getAverageRating(1);
alert(a);
}
function getAverageRating(pageId) {
$.ajax({
    url: "../services/rating.ashx?action=getAverageRating&pageId=" + pageId,
    dataType: "text",
    type: "GET",
    data: {},
    error: function (err) {
        displayDialogBox("Error", err.toString());
    },
    success: function (data) {
        return data;
    }
});
}

任何帮助将不胜感激。 谢谢,

1 个答案:

答案 0 :(得分: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);
        }
    });

}