亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery ajax成功匿名函數作用域

jQuery ajax成功匿名函數作用域

慕標琳琳 2019-10-26 12:36:27
如何從匿名成功函數中更新returnHtml變量?function getPrice(productId, storeId) {    var returnHtml = '';    jQuery.ajax({        url: "/includes/unit.jsp?" + params,        cache: false,        dataType: "html",        success: function(html){            returnHtml = html;        }    });    return returnHtml;}
查看完整描述

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,你們快點說我的意思了:-)


查看完整回答
反對 回復 2019-10-26
?
動漫人物

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

});


查看完整回答
反對 回復 2019-10-26
  • 3 回答
  • 0 關注
  • 827 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號