jquery - 从 jquery ajax 调用分配变量返回未定义

标签 jquery ajax callback return

我是 jquery 新手,我试图在 ajax 调用后为变量分配一个值,但它返回未定义。我的代码如下:

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;
    }
});
}

如有任何帮助,我们将不胜感激。 谢谢,

最佳答案

对于不习惯使用异步操作的人来说,这是一个非常常见的问题。它要求您重新思考如何构建代码,因为您不能仅以正常的顺序风格进行编程。

您无法从异步 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);
        }
    });

}

关于jquery - 从 jquery ajax 调用分配变量返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17015409/

相关文章:

javascript - 在 javascript 中将函数作为参数传递,而不是作为函数的返回值

javascript - Carousel - 如何遍历元素?

javascript - Firebug 和不清楚的 div

javascript - 为什么 jQuery 的 .animate() 在完成动画之前运行 "complete"函数?

javascript - CSS 列数 - 水平对齐 - 砌体网格

c# - 如何在没有ajax的情况下在Web表单中打开弹出窗口 modelpopupextender

javascript - 使用回调函数与仅在函数内插入函数相比有什么好处

ajax - 使用带有正则表达式的 ajax 进行表单验证

jquery - 使用 jquery ajax 请求尝试/捕获

node.js - 处理回调函数中引发的错误的正确方法是什么?