Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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_Ajax_Responsetext - Fatal编程技术网

Php 将XMLHttpRequest.responseText存储为变量:(

Php 将XMLHttpRequest.responseText存储为变量:(,php,javascript,ajax,responsetext,Php,Javascript,Ajax,Responsetext,} 这是因为Ajax是异步的,当您执行此操作时,结果尚未设置(加上变量使其成为函数的本地变量,您必须将其删除) 最好的做法是将innerHTML行移到readystatechange回调中 try{ // Opera 8.0+, Firefox, Safari ajaxRequest = new XMLHttpRequest(); } catch (e){ // Internet Explorer Browsers try{ ajaxRequest

}
这是因为Ajax是异步的,当您执行此操作时,
结果
尚未设置(加上
变量
使其成为函数的本地变量,您必须将其删除)

最好的做法是将
innerHTML
行移到readystatechange回调中

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
var result = ajaxRequest.responseText;      
    }
}
ajaxRequest.open("GET", "vartest.php", true);
document.getElementById('span').innerHTML = result;
ajaxRequest.send(null);

这是因为Ajax是异步的,并且当您这样做时,
result
尚未设置(加上
var
使其成为函数的本地变量,您必须删除它)

最好的做法是将
innerHTML
行移到readystatechange回调中

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
var result = ajaxRequest.responseText;      
    }
}
ajaxRequest.open("GET", "vartest.php", true);
document.getElementById('span').innerHTML = result;
ajaxRequest.send(null);

//这是在全球范围内
//所以它在任何地方都可以买到
**var结果**
函数ajaxFunction(){
var路径http://localhost/php/';
var fileName='yourCode.php';
var ajaxRequest;//使Ajax成为可能的变量!
试一试{
//Opera 8.0+、Firefox、Safari
ajaxRequest=新的XMLHttpRequest();
}捕获(e){
//Internet Explorer浏览器
试一试{
ajaxRequest=newActiveXObject(“Msxml2.XMLHTTP”);
}捕获(e){
试一试{
ajaxRequest=新的ActiveXObject(“Microsoft.XMLHTTP”);
}捕获(e){
//出了点问题
警告(“你的浏览器坏了!”);
返回false;
}
}
}
//创建一个函数,该函数将接收从服务器发送的数据
ajaxRequest.onreadystatechange=函数(){
if(ajaxRequest.readyState==4){
**结果=ajaxRequest.responseText**
}
}
打开(“GET”,路径+文件名,true);
ajaxRequest.send(空);
}

//这是在全球范围内
//所以它在任何地方都可以买到
**var结果**
函数ajaxFunction(){
var路径http://localhost/php/';
var fileName='yourCode.php';
var ajaxRequest;//使Ajax成为可能的变量!
试一试{
//Opera 8.0+、Firefox、Safari
ajaxRequest=新的XMLHttpRequest();
}捕获(e){
//Internet Explorer浏览器
试一试{
ajaxRequest=newActiveXObject(“Msxml2.XMLHTTP”);
}捕获(e){
试一试{
ajaxRequest=新的ActiveXObject(“Microsoft.XMLHTTP”);
}捕获(e){
//出了点问题
警告(“你的浏览器坏了!”);
返回false;
}
}
}
//创建一个函数,该函数将接收从服务器发送的数据
ajaxRequest.onreadystatechange=函数(){
if(ajaxRequest.readyState==4){
**结果=ajaxRequest.responseText**
}
}
打开(“GET”,路径+文件名,true);
ajaxRequest.send(空);
}

问题是,我想在其他地方使用结果作为变量,而不仅仅是在span标记中。有什么想法吗?@Earl您需要在onreadystatechange函数中设置该变量,并且该变量将在您无法预测的时间出现。您必须更改脚本以适应此情况。有可能进行同步调用chronous(以便脚本在调用之前暂停)但这是非常不鼓励的做法,因为它会使浏览器冻结视图,我对这一点非常陌生,我甚至不知道这意味着什么。很抱歉打扰大家。这个脚本对我来说并不重要,只是想寻找任何好的方法将responseText存储为变量。我非常了解如何将值存储为变量并传递它要获取php文件,不幸的是不是相反。@Earl要将响应文本存储在变量中,只需删除
var
关键字,但不能指望它在调用后可用。Ajax调用是在后台进行的,完成后返回。这就是为什么一切都取决于调用的原因的结果需要在onreadystatechange回调中。问题是,我想在其他地方将结果用作变量,而不仅仅是在我的span标记中。有什么想法吗?@Earl您需要在onreadystatechange函数中设置变量,并且在无法预测的时间它将在那里可用。您必须更改脚本以满足以下要求:r这一点。有可能使调用同步(因此脚本会暂停,直到调用完成)但这是非常不鼓励的做法,因为它会使浏览器冻结视图,我对这一点非常陌生,我甚至不知道这意味着什么。很抱歉打扰大家。这个脚本对我来说并不重要,只是想寻找任何好的方法将responseText存储为变量。我非常了解如何将值存储为变量并传递它要获取php文件,不幸的是不是相反。@Earl要将响应文本存储在变量中,只需删除
var
关键字,但不能指望它在调用后可用。Ajax调用是在后台进行的,完成后返回。这就是为什么一切都取决于调用的原因的结果需要在onreadystatechange回调中。如前所述,您不能指望
结果
在调用后立即可用。您需要了解Ajax的异步性质,并根据OK重新设计应用程序。我将花更多时间研究此问题。感谢您的建议。如前所述,您不能依赖e> 结果在您拨打电话后立即可用。您需要了解Ajax的异步性质,并根据Lyok重新设计应用程序。我将花更多时间研究此问题。感谢您的建议。
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
   document.getElementById('span').innerHTML = ajaxRequest.responseText;;      
}
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
      result = ajaxRequest.responseText;        
    }
}
ajaxRequest.open("GET", "vartest.php", true);
document.getElementById('span').innerHTML = result;
ajaxRequest.send(null);
}
<script language="javascript" type="text/javascript">

//this is in the global scope
//so it's available anywhere

**var result;**

function ajaxFunction(){

    var path = 'http://localhost/php/';
    var fileName = 'yourCode.php';


    var ajaxRequest;  // The variable that makes Ajax possible!

    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
                       **result = ajaxRequest.responseText;**
        }
    }


    ajaxRequest.open("GET", path+fileName, true);
    ajaxRequest.send(null); 
}

</script>