我写了这个对象并将其运行到我拥有的页面中:
var dataPage = {
getData: function() {
return $.ajax({
url: '/my_url/',
data: {
product: 'some_product',
state: 'some_state'
},
type: 'POST',
async: true,
success: function (data) {
//console.log(data);
dataPage.results = data;
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error:' + xhr.status);
alert(thrownError);
}
});
}
,returnData: function(){
var xhr = this.getData();
//console.log(xhr);
xhr.done(function() {
//console.log(xhr.responseText);
this.results = xhr.responseText;
$('#JSON').html(this.results);
});
}
}
var results = dataPage.returnData()
console.log(results)
当属性async
设置为false
时,它的效果非常好:数据已加载到div
id="JSON"
。两个console.log()
返回数据,一切正常。
现在我想切换到async: true
,但我不知道如何应用闭包来使函数正确传递结果数据,避免xhr.responseText
成为undefined
因为getData()
调用的异步性质。
我编辑了上面的代码,添加了returnData()
函数,但最后console.log()
仍然返回undefined
。添加.done()
并未解决取出全局范围的问题<{1}} ...
答案 0 :(得分:1)
使用done()
回调:
var jqXHR = dataPage.getData();
jqXHR.done(function(result) {
$('#JSON').html(result);
});