0


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

4

3 回答 3

1

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

于 2012-05-10T17:48:53.493 回答
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);
于 2013-07-08T13:28:48.853 回答
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
  }
}
于 2012-05-10T17:51:16.923 回答