Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在变量中保存XMLHttpRequest.responseText_Php_Javascript - Fatal编程技术网

Php 在变量中保存XMLHttpRequest.responseText

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

我正在用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);”行,那么程序将打印正确的答案。但没有办法将该值保存到变量中。 有人知道如何避开它吗

谢谢,
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将等待收到响应。