我有以下方法:
function priceRange(FESTIVALID){
jQuery.ajax({
url : '/actions/festheads.cfc?method=getPriceRangeByGUID',
type : 'POST',
data : 'FESTIVALID='+FESTIVALID,
dataType: 'json',
success : function(data) {
console.info("AJAX:qPrices",data.MINPRICE);
formatedPriceRange = '$ '+data.MINPRICE;
console.info("AJAX:formatedPriceRange", formatedPriceRange);
}//success
});//ajax;
//
return formatedPriceRange;
};
第二个 console.info 正确显示了格式化的价格范围, 但在函数之外是未定义的。
如何在 priceRange 函数之外访问这个变量? 谢谢
最佳答案
这很正常,这就是 AJAX 的工作原理。它是异步的,这意味着 jQuery.ajax
函数会立即返回,在这种情况下 formatedPriceRange
还没有被分配一个值,一旦服务器响应(例如10 秒后),调用成功回调并为变量赋值。
因此,始终在 success
回调函数中使用 AJAX 请求的结果。
您还可以将 async: false
选项传递给您的 jQuery.ajax
调用将对服务器执行同步请求并阻塞,直到检索到结果。显然,这将导致您的浏览器在执行请求期间卡住。所以它将不再是 AJAX(异步 Javascript 和 Xml),而是 SJAX(同步 Javascript 和 Xml)。
关于javascript & jQuery 作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5465005/