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 關注
- 827 瀏覽
添加回答
舉報