函数的执行顺序不正确
order of execution of the functions do not work properly
我有以下问题:函数的执行顺序不正确。我想在另一个函数中检索函数(表)的返回值。这看起来很简单,但对我来说很复杂,因为指令执行顺序没有正确完成,然后我无法获得第一个函数的返回值。
var tabImage = new Array;function remplissageDynamiqueImagesParId(idImag) {
alert("1");
var ajax = new XMLHttpRequest();
ajax.open("GET", "http://localhost/jsonrecuperImagesParId.php?id=" + idImag, true);
alert("2");
ajax.send();
alert("3");
ajax.onreadystatechange = function () {
alert("4");
if (ajax.readyState == 4 && (ajax.status == 200 || ajax.status == 0)) {
eval('var data = ' + ajax.responseText + ';');`enter code here`
var theResults = data.results;
alert("5");
for (var i = 0; i < theResults.length; i++) {
tabImage[i] = new imageFromBase(theResults[i].idImage, theResults[i].url);
}
alert("taille tableau:" + tabImage.length);
return tabImage;
}
}
} //fin methode
function test() {
alert("dans test");
var tab = new Array();
tab = remplissageDynamiqueImagesParId(10);
alert("fin test");
alert("taille tableau dans test: " + tab.length);
}
运行后,我得到这个:
- 在测试 1 2
- 3
- 鳍测试 4 4 5
- 身材表:5 4 5
- 身材表:5
为什么这个顺序?
我怎样才能拿到桌子?
原因是'Ajax'中的'A'代表异步。执行异步命令的函数不会等待命令完成。相反,当动作完成时,可以放置一个回调例程来触发(在本例中,它被放置到'onreadystatechanged'处理程序中,该处理程序在某些"就绪状态"发生变化时被调用。
特别是形式为a=function(params) { ... }
的语句不调用函数,但它声明或定义了函数。
我无法测试这个函数,因为我的本地主机上没有相同的内容,但我可以建议一些必要的更改。
-
切换
ajax.onreadystatechange = function () { ... }
和ajax.send();
的顺序如果没有这个,发送命令也可以在它有机会执行onreadystatechange
函数之前完成。 -
声明函数remplissageDynamiqueImagesParId(idImag, result){…}用ajax。Onreadystatechange = function(){…结果。xxx = tabImage;}
- 呼叫
var result={}; tab = remplissageDynamiqueImagesParId(10, result);
同样,由于这是异步的,在第一个被调用的函数返回后,结果不会立即改变。
我找到了解决方案,只需将函数的最后一个参数更改为false(使其成为同步函数)并删除可能使执行繁重的警报
我试试这个:
var tabImage=new Array;
function remplissageDynamiqueImagesParId(idImag,tabImage)
{
var ajax = new XMLHttpRequest();
ajax.onreadystatechange=function(){
alert("4");
if(ajax.readyState==4 && (ajax.status==200||ajax.status==0)){
eval('var data = ' + ajax.responseText + ';');
var theResults = data.results;
alert("5");
for(var i=0;i<theResults.length;i++)
{
tabImage[i]=new imageFromBase(theResults[i].idImage,theResults[i].url);
}
alert("taille tableau "+tabImage.length);
return tabImage;
}
}
ajax.open("GET","http://localhost/jsonrecuperImagesParId.php?id="+idImag,true);
ajax.send();
alert("fin remplissageDynamiqueImagesParId");
}//fin methode
function test()
{
alert("dans test");
remplissageDynamiqueImagesParId(10,tabImage);
alert("fin test");
alert("taille tableau dans test: "+tabImage.length);
}
,但不幸的是,我不能从第一次执行得到我的表,它从第二次正常工作。但不幸的是,这并不能解决我的问题。有人知道我如何阻止执行,直到ajax。Onreadystatechange完成它的执行。谢谢你的帮助。
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- Amazon S3 REST API大小不正确
- Javascript Reg Exp不正确匹配
- DIV并排,位置不正确
- 仅在IE中,javascript中的时区名称不正确
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- Node.js:多个然后'It’执行顺序不正确
- 画布绘制调用呈现顺序不正确
- JavaScript 循环输出顺序不正确 - 如何解决这个问题
- 在 sort() 之后,十进制数的 JavaScript 数组顺序不正确
- 阅读顺序不正确
- AngularJS异步调用多个数据库,并且保存顺序不正确
- 以不正确的顺序从绑定中删除2.0参数
- 函数的执行顺序不正确
- 引导旋转木马指示不按正确顺序循环
- 为什么浏览器不一致地呈现顺序不正确的jQuery
- Javascript -异步函数导致不正确的顺序
- Jquery .fadein .fadeout回调嵌套顺序不正确
- 对顺序不正确的数字进行排序
- Jquery滑块需要javascript帮助,缩略图的顺序不正确