Php 在变量中保存XMLHttpRequest.responseText
我正在用JS编写一个小脚本,使用php网站保存数据,如下所示:Php 在变量中保存XMLHttpRequest.responseText,php,javascript,Php,Javascript,我正在用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
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);”行,那么程序将打印正确的答案。但没有办法将该值保存到变量中。
有人知道如何避开它吗
谢谢,
Son您必须给出函数名。。。下面的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;
...
...
}
您必须提供一个函数名。。。下面的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;
...
...
}
警报
在响应文本
到达之前触发。您可以使用回调函数,也可以将警报向上移动到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);
}
警报
在响应文本
到达之前触发。您可以使用回调函数,也可以将警报向上移动到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);
}
“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);
}
“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);
}
如果将响应分配给一个正确的全局变量,或者更新文档的内容,那么它应该可以正常工作。 我想问题在于最后一条警戒线
xhr_object.onreadystatechange=function() {
if (xhr_object.readyState==4) {
//alert(xhr_object.responseText) ;
res = xhr_object.responseText ;
}
}
alert(res); // THIS LINE
请注意,
onreadystatechange
是一个回调函数,这意味着在收到响应时将调用此函数。也就是说,该函数是异步调用的。因此,应用程序将继续执行,并且您的警报可以(将)在收到响应之前执行。因此,您将收到一个显示为“0”的警报 如果将响应分配给一个正确的全局变量,或者更新文档内容,它应该可以正常工作。
我想问题在于最后一条警戒线
xhr_object.onreadystatechange=function() {
if (xhr_object.readyState==4) {
//alert(xhr_object.responseText) ;
res = xhr_object.responseText ;
}
}
alert(res); // THIS LINE
请注意,
onreadystatechange
是一个回调函数,这意味着在收到响应时将调用此函数。也就是说,该函数是异步调用的。因此,应用程序将继续执行,并且您的警报可以(将)在收到响应之前执行。因此,您将收到一个显示为“0”的警报 您需要一个事件处理程序函数,用于将响应传递给它if(readyState==4)
,或者将其保存到一个全局变量,然后调用事件处理程序函数。您需要一个事件处理程序函数,用于将响应传递给它if(readyState==4)
,或者将其保存到一个全局变量,然后调用事件处理函数。您的代码示例没有太多意义。您可能会修改格式,但为什么会有额外的大括号?您的代码示例没有太多意义。你可能会修改格式,但为什么会有额外的大括号?谢谢你的回答!有没有办法强迫getPopulation等待响应到达?因为我想要的是在res
时检索值,alert(res)
仅用于测试目的。XMLHttpRequest.open()方法的第三个参数控制请求是否异步。如果将函数调用更改为xhr\u object.open(“GET”,url,false)代码>,这将使您的呼叫同步,JavaScript将等待收到响应。感谢您的回答!有没有办法强迫getPopulation等待响应到达?因为我想要的是在res
时检索值,alert(res)
仅用于测试目的。XMLHttpRequest.open()方法的第三个参数控制请求是否异步。如果将函数调用更改为xhr\u object.open(“GET”,url,false)代码>,这将使您的调用同步,JavaScript将等待收到响应。