Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Javascript-不传输对象属性_Javascript_Ajax_Javascript Objects - Fatal编程技术网

Javascript-不传输对象属性

Javascript-不传输对象属性,javascript,ajax,javascript-objects,Javascript,Ajax,Javascript Objects,我对Javascript非常陌生,我一生都无法理解为什么下面的对象属性没有传输 我按如下方式调用对象: var URL = "TABLE=_Products&COLUMNS=price_Qty,Sale&MATCH=internal_Model&ROWS="+itemnum ; var ITEM = new get_Database_Info(URL) ; “获取数据库信息”是: function get_Database_Info(PARAMS) { aler

我对Javascript非常陌生,我一生都无法理解为什么下面的对象属性没有传输

我按如下方式调用对象:

var URL = "TABLE=_Products&COLUMNS=price_Qty,Sale&MATCH=internal_Model&ROWS="+itemnum ;
var ITEM = new get_Database_Info(URL) ;
“获取数据库信息”是:

function get_Database_Info(PARAMS) {
    alert(toString(this));
    var URL = document.location.protocol+'//'+document.location.host+'/Catalog/Tools/ajax_Database_Request.php' ;

    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
    else{// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

    if(!xmlhttp){alert('Error: Cannot send XML request.');}
        xmlhttp.onreadystatechange=function() {

            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                alert(toString(this));
                var RESPONSE = xmlhttp.responseText ;
                RESPONSE = RESPONSE.replace(/^\s+/, '');
                var ARR = RESPONSE.split('||') ;
                ARR.pop() ;
                for(var i=0; i<ARR.length; i++){
                    var temparr1 = ARR[i].split('=') ;
                    var NUM = temparr1[0] ;
                    this[NUM] = new Array() ;
                        var temparr2 =   temparr1[1].split('/|') ;
                        temparr2.shift() ;
                            for(var x=0; x<temparr2.length; x++){

                                var temparr3 = temparr2[x].split('??') ;

                                this[NUM][temparr3[0]] = temparr3[1] ;

                            }
                }

            }
        }

    xmlhttp.open("POST", URL, true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", PARAMS.length);
    xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(PARAMS);
函数获取数据库信息(参数){
警报(toString(this));
var URL=document.location.protocol+'/'+document.location.host+'/Catalog/Tools/ajax_Database_Request.php';
if(window.XMLHttpRequest){//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
如果(!xmlhttp){alert('错误:无法发送XML请求');}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
警报(toString(this));
var RESPONSE=xmlhttp.responseText;
RESPONSE=RESPONSE.replace(/^\s+/,“”);
var ARR=RESPONSE.split(“| |”);
ARR.pop();

对于(var i=0;i我大胆猜测,当附加到onreadystatechange的函数运行时,
this
不再附加到在构造函数中创建的对象,而是可能附加到全局对象或
xmlhttp
对象。我将尝试使用
var that=this
模式:

function get_Database_Info(PARAMS) {
    alert(toString(this));
    var URL = document.location.protocol+'//'+document.location.host+'/Catalog/Tools/ajax_Database_Request.php' ;

    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
    else{// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

    var that=this; // value of that will be stored in the closure

    if(!xmlhttp){alert('Error: Cannot send XML request.');}
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                alert(toString(that));
                var RESPONSE = xmlhttp.responseText ;
                RESPONSE = RESPONSE.replace(/^\s+/, '');
                var ARR = RESPONSE.split('||') ;
                ARR.pop();
                var arrLength = ARR.length; // always precompute array length
                for(var i=0; i<ARR.length; i++){
                    var temparr1 = ARR[i].split('=') ;
                    var NUM = temparr1[0] ;
                    // that is actually equal to the object that I created
                    // in the constructor.
                    that[NUM] = new Array() ;
                    var temparr2 =   temparr1[1].split('/|') ;
                    temparr2.shift() ;
                    var arrayLength = temparr2.length; // always precompute length
                    for(var x=0; x<arrayLength; x++){
                        var temparr3 = temparr2[x].split('??') ;
                        that[NUM][temparr3[0]] = temparr3[1] ;
                    }
                }
            }
        }

    xmlhttp.open("POST", URL, true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", PARAMS.length);
    xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(PARAMS);
函数获取数据库信息(参数){
警报(toString(this));
var URL=document.location.protocol+'/'+document.location.host+'/Catalog/Tools/ajax_Database_Request.php';
if(window.XMLHttpRequest){//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
var that=this;//其值将存储在闭包中
如果(!xmlhttp){alert('错误:无法发送XML请求');}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
警惕;
var RESPONSE=xmlhttp.responseText;
RESPONSE=RESPONSE.replace(/^\s+/,“”);
var ARR=RESPONSE.split(“| |”);
ARR.pop();
var arrLength=ARR.length;//始终预计算数组长度

对于(var i=0;i什么时候检查对象的内容?请求是异步的,因此您必须等到回调处理完响应后,对象中才有任何属性


如果在创建对象后立即查找属性,它们将永远不会出现。即使响应非常快,回调可以第一次运行是在您退出创建对象的函数时,因此浏览器会重新获得控件。

问题是调用异步请求。我知道这是如何工作的奇怪的是,尽管我实际上要求对象首先获得这些属性,但特定的脚本仍然继续运行。