Ajax发送功能不会'开火?

时间:2010-01-20 14:46:44

标签: javascript ajax

每当我运行这个文件时,代码就会运行到发送函数触发的位置,然后只有在我有一个警报函数后才会触发,如果我取出警报(“发送”);然后它回复ServerReadyyState是:1。

可能是什么问题?有人请帮忙,我已经在我的本地机器和我的个人服务器上尝试过,并得到了相同的结果。非常感谢任何帮助。

守则:

/**
 * @author d
 */
var xhr;

function getPlants(xhr) {
  try {
    xhr = new XMLHttpRequest();
  } catch (microsoft) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        xhr = false;
        alert("ajax not supported");
      }
    }
  }
  xhr.open("GET", "db_interactions.php", true);


  xhr.send(null);
  alert("sent"); //the send function only works if this alert functions is here
  if (xhr.readyState == 4) {

    return xhr.responseText;
  } else {
    alert("Server ReadyState is:" + xhr.readyState);
    xhr.abort();
    //getPlants(xhr);       
  }
}

2 个答案:

答案 0 :(得分:1)

AJAX是异步的。您不能在紧接着之后立即检查就绪状态。

正确的设计模式是为就绪状态改变时的AJAX调用分配一个函数。

xhr.onreadystatechange = function () { alert('It changed!') }

函数中,您需要检查状态是否为4.如果是,您就可以处理输出了。如果不是,则不执行任何操作,因为在就绪状态为4之前将调用该函数几次。

答案 1 :(得分:0)

请求需要一些时间。添加alert()时,代码将被停止,直到用户单击ok。因此,当您删除它时,请求将被发送并立即检查。导致未完成的请求。

将代码更改为:

xhr.onreadystatechange=state_change
xhr.send(null);

function state_change() {
    if(xhr.readyState==4) {
         return xhr.responseText;
    } else {
         alert("Server ReadyState is:"+xhr.readyState);     
    }
}

某种功能就像在这种情况下每次状态改变时都会调用 state_change 。因此,您可以等到请求完成或出现错误代码。