为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 793 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信