3 回答
TA贡献1798条经验 获得超7个赞
简短的答案,您不能,AJAX中的第一个A代表异步,这意味着当您返回return语句时,请求仍在进行中。
您可以使用同步(非异步)请求来完成此操作,但这通常是一件坏事
像下面这样的东西应该返回数据。
function getPrice(productId, storeId) {
var returnHtml = '';
jQuery.ajax({
url: "/includes/unit.jsp?" + params,
async: false,
cache: false,
dataType: "html",
success: function(html){
returnHtml = html;
}
});
return returnHtml;
}
但
除非你真的很需要能够使用从测试的返回值直线距离,你会多更好传递一个回调到测试。就像是
function getPrice(productId, storeId, callback) {
jQuery.ajax({
url: "/includes/unit.jsp?" + params,
async: true,
cache: false,
dataType: "html",
success: function(html){
callback(html);
}
});
}
//the you call it like
getPrice(x,y, function(html) {
// do something with the html
}
编辑 Sheesh,你们快点说我的意思了:-)
TA贡献1815条经验 获得超10个赞
您的匿名函数确实可以访问returnHtml其范围内的变量,因此该代码实际上可以按您期望的那样工作。您可能出错的地方是在return语句中。
请记住,一个在AJAX表示asynchronous,这意味着它不会在同一时间发生。因此,该行returnHtml = html实际上是在您调用之后发生的return returnHtml;,因此returnHtml仍然是一个空字符串。
在不看到其余代码的情况下,很难说出要如何使它正常工作应该做什么,但是您可以做的是向该函数添加另一个回调:
function getPrice(productId, storeId, callback) {
jQuery.ajax({
url: "/includes/unit.jsp?" + params,
cache: false,
dataType: "html",
success: callback
});
}
getPrice(5, 1, function(html) {
alert(html);
});
- 3 回答
- 0 关注
- 793 浏览
添加回答
举报