将XMLHttpRequest.responseText保存在变量中
saving XMLHttpRequest.responseText in a variable
我正在JS中编写一个小脚本,以使用如下php网站保存数据:
function getPopulation(id) {
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non support? par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
var url = "http://localhost/inf347/td-svg/population.php?id=1";
var res = 0;
xhr_object.open("GET", url,true);
xhr_object.send(null) ;
xhr_object.onreadystatechange=function() {
if (xhr_object.readyState==4) {
//alert(xhr_object.responseText) ;
res = xhr_object.responseText ;
}
}
alert(res);
//return -1;
}
如果我取消注释行"//alert(xhr_object.responseText);",则程序将打印正确的答案。但是没有办法将该值保存到变量中。有人知道如何避开它吗?
谢谢,子
"alert(res);"将不起作用,因为浏览器不等待AJAX调用完成,而是执行整个脚本。如果要对返回的数据执行操作,则需要在xhr_object.onreadystatechange函数中添加回调。
if (xhr_object.readyState==4) {
//alert(xhr_object.responseText) ;
res = xhr_object.responseText ;
act_on_response(res);
}
代码中的其他位置:
function act_on_response(res)
{
alert(res);
}
您必须给出一个函数名称。。。se低于
if (httpRequest.status == 200)
responseData(httpRequest);
else
window.status = httpRequest.statusText;
}
}
httpRequest.send(zallInOne);
}
function responseData(dataFromServer) {
var d = new Date();
document.getElementById("sha1").style.color = "#ff6000";
document.getElementById("sha1").value = dataFromServer.responseText;
...
...
}
如果将响应分配给一个适当的delcare全局变量,或者更新文档的内容,它应该可以正常工作。
我想问题出在最后一条警戒线上。
xhr_object.onreadystatechange=function() {
if (xhr_object.readyState==4) {
//alert(xhr_object.responseText) ;
res = xhr_object.responseText ;
}
}
alert(res); // THIS LINE
请注意,onreadystatechange
是一个回调函数,这意味着在收到响应时将调用此函数。也就是说,该函数是异步调用的。因此,应用程序将继续执行,并且您的警报可以(将)在收到响应之前执行。因此,您将收到一个显示为"0"的警报。
alert
在responseText
到达之前被触发。您可以使用回调函数,也可以将警报上移到statechange
函数中。这是因为getPopulation
启动XMLHtpRequest
,但它本身并不等待完成,并一次性执行函数中的所有内容。readystatechange
处理程序同时侦听要操作的触发器,但该触发器大部分时间发生在调用函数执行之后。
// move alert up
if (xhr_object.readyState==4) {
res = xhr_object.responseText ;
alert(res);
}
// use a callback
if (xhr_object.readyState==4) {
myCallback(xhr_object.responseText);
}
function myCallback(res){
alert(res);
}
相关文章:
- 为什么不允许值为0的变量询问是否存在
- AngularJS中存在与$scope变量相关的问题.UI中的值未更改
- 测试变量存在性的Javascript多重赋值:var obj=obj||{}
- 通过字符串形式的名称检查变量是否存在于本地作用域内
- 检查全局变量是否存在的正确方法是什么
- 验证JavaScript中是否存在变量
- javascript引擎:变量存在
- 如何将用户会话保存在PHP中的一个变量中,以便在JavaScript中引用
- 简写 if/else 变量存在
- 流星:如何避免检查到处是否存在变量或属性
- 等到元素存在,循环,然后存储在变量中
- 我的变量保存在 URL/位置中,如何从另一个页面读取它
- 处理 JavaScript 中不存在的变量
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- 如果 Django 模板变量存在,则执行 Javascript
- 如果字符串变量存在,我如何从中删除包含[“”]
- 如果变量存在,则有条件地调用函数或脚本
- AngularJS $rootScope变量存在,但不可访问
- 如果变量存在...对象与变量,null与未定义
- Java脚本-给定字符串输入,查找是否有相同名称的变量,如果变量存在更改值