Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AJAX调用中首先执行哪些方法?_Javascript_Ajax_Methods - Fatal编程技术网

Javascript 在AJAX调用中首先执行哪些方法?

Javascript 在AJAX调用中首先执行哪些方法?,javascript,ajax,methods,Javascript,Ajax,Methods,我一直在学习AJAX,我有点困惑AJAX调用中方法的执行顺序。我看到了太多的变化。比如说 function submitArticle() { try { //alert("yaay"); xhr = new XMLHttpRequest(); } catc

我一直在学习AJAX,我有点困惑AJAX调用中方法的执行顺序。我看到了太多的变化。比如说

                function submitArticle() {                  

                try {
              //alert("yaay");
                    xhr = new XMLHttpRequest();
                  }
                  catch(e) {
                    try {
                      xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch(e) {
                      try {
                          xhr = new ActiveXObject("Msxml2.XMLHTTP");
                      }
                      catch(e) {
                        alert("Your Browser is not Supported");
                        return false;
                      }
                    }    

                  }
              var parameters = "postTitle=" + postTitle "&postDes=" + postDes + "&postCont=" + postDes;    
              xhr.open('POST', '/engine/engine.php', true);      
              xhr.send(parameters);                                  
              xhr.onreadystatechange = function() {
                  if(this.readyState === 4) {
                      if(this.status ===200) {
                         alert(this.responseText);
                      }
                      else {
                        alert("status" + this.status);
                       }
                  }
                  else {
                    alert("readyState" + this.readyState);
                  }
              }


          }

我的问题是,我看到的代码中,opensend方法被放置在一个非常不同的位置,比如在计算readyState值之后。这是正确的选择。我在不同的网站上查找过,看到的都是jquery教程,没有一个解释过代码的执行顺序。抱歉,如果这是一个非常愚蠢的问题,或者如果我的代码是错误的

Javascript只能在代码运行完成后,当控件返回到事件循环时调用
onreadystatechange
回调


因此,无论是在发送请求之前还是之后添加处理程序,只要在同步执行的同一单元中添加处理程序即可。

该代码不正确。什么是
open()
send()
。它缺少了
xhr。
谢谢,我将对此进行更改。为了详细说明SLaks的意思,您实际上并没有在代码中执行ajax调用。您正在设置ajax调用。如果同步进行调用,则调用将发生在
Send()
上。但是如果它是异步的(这是默认的),它将由浏览器在事件循环中执行,正如SLaks所解释的。谢谢大家,我现在明白了。