Javascript中的AJAX-命名回调;不起作用

AJAX in Javascript - named callback doesn't work

本文关键字:回调 不起作用 中的 AJAX- Javascript      更新时间:2023-12-01

我正在用javascript做一个非常简单的AJAX演示。我的应用程序有一个AddCountry页面,用户选择一个国家,状态列表是通过AJAX动态填充的。

演示一直很好,直到我决定尝试一些新的东西。我使用的不是带有onreadystatechange事件处理程序的匿名回调,而是命名回调。它给了我这个错误:

Uncaught InvalidStateError: Failed to read the 'status' property from 'XMLHttpRequest': the object's state must not be OPENED. 

这里有两个示例代码:

通用部分:

<script type="text/javascript">
   function createXHR(){
       if(window.XMLHttpRequest)
           return new XMLHttpRequest();
       else 
           return new ActiveXObject("MSXML2.XMLHTTP");
   }
   function getStates()
   {
       alert("inside getStates");
       var ajax = createXHR(); // step 1 : create XHR object
       alert("XHR:"+ajax);
       // step 2: creating the ajax request
       var inputVal = document.getElementById("country"); 
       var country = inputVal.value;
       alert("Value:"+country);
       ajax.open("GET","index.jsp?country="+country, true);  
       // sending the ajax request
       ajax.send(null);
       // step 4: monitoring for and updating the response

在此之后,此代码不起作用:

ajax.onreadystatechange = ajaxCallback();
         function ajaxCallback(){
             //alert("Response Received:"+ajax.status);
               if (ajax.status === 404)
                   alert("status 404");
               if (ajax.readyState === 4 && ajax.status === 404)
               { 
                   alert("Response Received; "+ajax.responseText);
                   document.getElementById("states").innerHTML = ajax.responseText; 
               }
          }

但这是有效的:

ajax.onreadystatechange = function (){
    if (ajax.readyState == 4 && ajax.status == 200)
    { document.getElementById("states").innerHTML = ajax.responseText; }
}

有人能告诉我这里的错误是什么吗?

提前感谢,Navin

您正在调用函数并将响应分配给onreadystatechange,而不是将处理程序分配给事件。应该是:

ajax.onreadystatechange = ajaxCallback;