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