从 jquery ajax 调用分配变量返回未定义
Posted
技术标签:
【中文标题】从 jquery ajax 调用分配变量返回未定义【英文标题】:Assigning variable from jquery ajax call returns undefined 【发布时间】:2013-06-05 14:36:34 【问题描述】:我是 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;
);
任何帮助将不胜感激。 谢谢,
【问题讨论】:
看起来这与此处讨论的场景相同***.com/questions/14220321/… 【参考方案1】:对于不习惯使用异步操作的人来说,这是一个很常见的问题。它要求您重新考虑如何构建代码,因为您不能只以正常的顺序样式进行编程。
您不能从异步 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 ajax 调用分配变量返回未定义的主要内容,如果未能解决你的问题,请参考以下文章