Edw*_*uay 17 javascript ajax extjs callback
在我的应用程序中,我Ext.Ajax.request用来加载我执行的脚本eval.
问题是,由于AJAX请求需要一段时间才能完成,之后执行的代码需要通过AJAX加载的脚本中的变量.在这个例子中,我展示了这种情况.如何更改此代码,以便在AJAX等待直到AJAX调用中的脚本加载并执行后执行JavaScript?
testEvalIssue_script.htm:
<script type="text/javascript">
console.log('2. inside the ajax-loaded script');
</script>
Run Code Online (Sandbox Code Playgroud)
main.htm中:
<html>
<head>
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all-debug.js"></script>
<script type="text/javascript">
function loadViewViaAjax(url) {
Ext.Ajax.request({
url: url,
success: function(objServerResponse) {
var responseText = objServerResponse.responseText;
var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
while(scripts=scriptsFinder.exec(responseText)) {
eval.call(window,scripts[1]);
}
}
});
}
console.log('1. before loading ajax script');
loadViewViaAjax('testEvalIssue_script.htm');
console.log('3. after loading ajax script');
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出:
1. before loading ajax script
3. after loading ajax script
2. inside the ajax-loaded script
Run Code Online (Sandbox Code Playgroud)
如何使输出的顺序正确,如下所示:
1. before loading ajax script
2. inside the ajax-loaded script
3. after loading ajax script
Run Code Online (Sandbox Code Playgroud)
Chr*_*isR 12
Ajax是异步的,这意味着调度了ajax调用,但是你的代码在不停止的情况下继续像以前一样运行.在收到响应之前,Ajax不会停止/暂停执行.你必须添加一个额外的回调函数或类似的东西.
<html>
<head>
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all-debug.js"></script>
<script type="text/javascript">
function loadViewViaAjax(url, callback) {
Ext.Ajax.request({
url: url,
success: function(objServerResponse) {
var responseText = objServerResponse.responseText;
var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
while(scripts=scriptsFinder.exec(responseText)) {
eval.call(window,scripts[1]);
}
callback.call();
}
});
}
console.log('1. before loading ajax script');
var afterAjax = function(){
console.log('3. after loading ajax script');
}
loadViewViaAjax('testEvalIssue_script.htm', afterAjax);
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56078 次 |
| 最近记录: |