jQuery ajax成功匿名函数作用域

如何从匿名成功函数中更新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;

}


慕标琳琳
浏览 794回答 3
3回答

元芳怎么了

简短的答案,您不能,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 likegetPrice(x,y, function(html) {    // do something with the html}编辑 Sheesh,你们快点说我的意思了:-)

动漫人物

您的匿名函数确实可以访问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);});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JQuery