AJAX,客户端JavaScript在服务器端JavaScript之前处理?

时间:2012-05-10 17:45:57

标签: javascript ajax client-side server-side


我有一个问题,如何处理客户端代码以及服务器端响应。 我有一些代码(太复杂,很难在这里发布),当它运行时,调用一个函数,它使用HTTPRequest对象运行一些服务器端代码,并返回一个字符串到调用该函数的页面。出于某种原因,我认为正在处理客户端代码,返回字符串(为时已晚)并且我的代码因此而失败。例如,我使用HTTPRequest调用我的函数,下一行我尝试在警报中显示返回的值(来自HTTPRequest的字符串),警报显示为空白。但是在代码的后面几行,同样的警报会显示返回的值。所以,基本上,我的印象是第一个客户端警报正在处理,以便它显示一个尚未返回的字符串,而第二个警报稍后处理,(ergo。给服务器时间处理请求)并显示请求的字符串。这个理论听起来合乎逻辑吗无论HTTPRequest是否完成,客户端代码都会运行吗?如果是这样,有没有办法阻止客户端代码执行,直到从服务器收到响应?

3 个答案:

答案 0 :(得分:1)

HTTP请求是异步的。这意味着您的代码将发送它并继续执行它。您需要设置一个回调函数,该函数接收XHR请求返回的数据,并以某种方式使用该数据。

答案 1 :(得分:0)

您需要将匿名函数绑定到XmlHttpRequest对象的onreadystatechange事件,以便:

//xhr is an instance of the XmlHTTPRequest object that you have opened correctly
xhr.onreadystatechange = function(){  //4 means the request was successful
  if (xhr.readyState === 4){
    //Your code here
  }
}

答案 2 :(得分:0)

您需要确保尝试显示/操作返回值的代码位于ajax例程的范围内。这是保证在请求完成之前不会对响应采取行动的唯一方法(无论是否成功)。例如,如果您使用的是jQuery: 的 CORRECT

jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) {
    $('#myDIV').html(data);
});

<强>不正确

jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) {});
$('#myDIV').html(data);