ajax发送请求两次

时间:2011-03-31 01:56:05

标签: javascript ajax xmlhttprequest

示例网址:http://twitter.realgamingreview.com/index.php

编辑:忘了提及:使用测试登录:test / test输入用户名/密码。

我正在尝试执行一个简单的AJAX请求来从数据库中检索一些数据。目标文件serverTime.php似乎工作得很好;它插入所需的数据并返回所需的responseText。

然而,该请求似乎是两次开火。当我使用Firebug逐步执行JavaScript时,这一点很清楚。这会导致页面“重置”(不完全确定),这样我的光标就会失去当前文本框的焦点,这是一个新问题。 URL也说“localhost / twitter / index.php?message =”,即使我的消息实际上并不是空的。我想在重大问题出现之前解决这个相当小的问题。

JavaScript如下。 ajaxRequest是我的XMLHTTPRequest对象。任何帮助表示赞赏!

//Create a function that will receive data sent form the server
ajaxRequest.onreadystatechange = function(){
    if (ajaxRequest.readyState == 4){
        document.getElementById('output').innerHTML = ajaxRequest.responseText;
    }
}
// build query string
var message = document.myForm.message.value;
var queryString = "message=" + message;

    //send AJAX request
    ajaxRequest.open("GET", "serverTime.php" + "?" + queryString, true);

    ajaxRequest.send(null);

谢谢,

帕拉贡

3 个答案:

答案 0 :(得分:4)

我已经看过很多次了,对我而言,它一直都是萤火虫。尝试关闭firebug并再次提交请求。使用fiddler或其他方法来验证请求只执行一次。

答案 1 :(得分:1)

我的问题与AJAX完全无关。相反,这是一个简单(但模糊)的问题,在我的表单中有两个文本框,我能够点击输入而没有页面重新加载,但只有一个,页面会因某种原因重新加载。

我已经改变了我的事件系统,以至于我不依赖于那些不可靠的东西(现在使用jQuery来监听按下特定文本框的Enter键)。

感谢那些花时间回答我错误信息的人。

答案 2 :(得分:0)

当我在Javascript中编写AJAX函数时,我通常会保留一个状态变量,以阻止在当前正在进行调度时调度新请求。如果您只想忽略在另一个请求完成之前发出的请求,您可以执行以下操作:

  1. 将inProgress初始化为false。
  2. 在调用ajaxRequest.send()之前将inProgress设置为true。除非inProgress为false,否则不要调用ajaxRequest.send()。
  3. 当状态为4时,ajaxRequest.onreadystatechange()将inProgress设置为false。
  4. 但是,在某些情况下,您希望对操作进行排队。如果是这种情况,那么当inProgress为true时,您不能忽略对ajaxRequest.send()的请求。以下是我对这些案例的建议:

    1. 将ajaxQueue初始化为空的全局数组。
    2. 在调用ajaxRequest.send()之前,将请求推送到ajaxQueue。
    3. 在状态为4的ajaxRequest.onreadystatechange()中,弹出数组以删除请求只是服务。然后,如果ajaxQueue不为空(array.size> 0),则再次弹出并对返回的对象调用send()。