我正在进行如下内联的ajax调用,并将响应存储在全局变量中,并出于某些性能原因稍后访问。
<script type="text/javascript">
var gblAjaxResponse;
$.ajax({
url: '/test.aspx',
success: function(data) {
gblAjaxResponse=data;
}
});
</script>
现在我想在ajax文件的document.ready中使用这个全局变量。一旦DOM准备就绪,我就必须在该页面上的某些div上使用这些数据。
$(document).ready(function() {
alert(gblAjaxResponse);
});
我现在有以下问题。
1)由于ajax是异步调用,因此确保在我准备好document.ready时总是得到对该全局变量的响应。 2)我的document.ready代码是否有可能在ajax成功处理程序返回后执行 3)我不想使用asyn false选项,因为它可以挂起。 4)无论如何都要检查成功是否完成并返回数据。
任何建议都将受到赞赏
答案 0 :(得分:3)
1)因为ajax是异步调用它 确定我总是得到回复 到了那个全局变量的时候 我准备好了document.ready。
不,document.ready
之前可以执行。
2)我有没有机会 document.ready代码被执行 在ajax成功处理程序下面返回
是
4)无论如何都要检查是否成功 已完成并返回数据。
根据肯尼斯的回答,你可以这样做:
<script type="text/javascript">
var gblAjaxResponse;
$.ajax({
url: '/test.aspx',
success: function(data) {
gblAjaxResponse = data;
myCallbackFunction();
}
});
function myCallbackFunction(){
alert(gblAjaxResponse);
}
</script>
如果您需要在gblAjaxResponse
中使用document.ready
,也可以这样做:
<script type="text/javascript">
var gblAjaxResponse = null;
$.ajax({
url: '/test.aspx',
success: function(data) {
gblAjaxResponse = data;
}
});
$(document).ready(function(){
//Wait until gblAjaxResponse has value:
var intervalId = setInterval(function(){
if(gblAjaxResponse !== null){
clearInterval(intervalId);
myCallbackFunction();
}
}, 100);
});
function myCallbackFunction(){
alert(gblAjaxResponse);
}
</script>
答案 1 :(得分:1)
这是我的建议:
将AJAX调用放在$(document).ready()中,然后在成功时执行回调函数。
<script type="text/javascript">
var gblAjaxResponse;
$(document).ready(function(){
$.ajax({
url: '/test.aspx',
success: function(data) {
gblAjaxResponse = data;
myCallbackFunction();
}
});
});
myCallbackFunction(){
alert(gblAjaxResponse);
}
</script>
答案 2 :(得分:0)
虽然函数回调是避免挂起脚本(可能还有页面)的最佳方法,但您也可以强制调用同步:
$.ajax{
url: blah,
type: json,
async: false
}
就像我说的那样,这会强制你的其他javascript等待请求。