Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

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 如何在我的对象中获取跨浏览器ajax引用_Javascript_Ajax_Oop_Object - Fatal编程技术网

Javascript 如何在我的对象中获取跨浏览器ajax引用

Javascript 如何在我的对象中获取跨浏览器ajax引用,javascript,ajax,oop,object,Javascript,Ajax,Oop,Object,我有一个返回此数据的服务器端文件 { success: true, m_sName:'smith, james', m_ShortName:'Jim_S', m_FirstName:'james', m_LastName:'smith', m_Rank:'CONT', m_Unit:'', m_Address:'PO Box 241', m_City:'guthrie', m_State:'KY', m_Zip:'42234', m_Phone:'270-956-3174', m_Fax:'',

我有一个返回此数据的服务器端文件

{
success: true,
m_sName:'smith, james',
m_ShortName:'Jim_S',
m_FirstName:'james',
m_LastName:'smith',
m_Rank:'CONT',
m_Unit:'',
m_Address:'PO Box 241',
m_City:'guthrie',
m_State:'KY',
m_Zip:'42234',
m_Phone:'270-956-3174',
m_Fax:'',
m_Email:'krullwarking@yahoo.com',
m_Title:'',
m_RegnetName:'james.andrew.smith',
m_BirthMonth:'10',
m_UserID:105745,
m_Age:47
}
然后在客户端上,我有如下代码:

var Person = {
//Private members

getXmlRequestObj : function() {
        if (window.XMLHttpRequest) {
            importHTML2: new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            importHTML2: new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            importHTML2: "Your Browser needs an upgrade";
        }
    },


//Set up the global content retrieval object
//called importHTML
importHTML:  new ActiveXObject("Microsoft.XMLHTTP"),



getAjaxData:function(sUrl) {
    if (Person.importHTML.readyState == 4 || Person.importHTML.readyState == 0) {
        Person.importHTML.open("GET", sUrl, false);// make it wait for the response
        Person.importHTML.onreadystatechange = Person.handleDataArrived; 
        Person.importHTML.send(null);
    }       
},

//Called when the AJAX response is returned from any operation
//that lists handleContentArrived as its onreadystatechanged event
//for importHTML eg:importHTML.onreadystatechange = handleContentArrived; .
handleDataArrived: function() {
    if (Person.importHTML.readyState == 4) {
        Person._bar = eval("("+Person.importHTML.responseText+")");
        Person._sName = Person._bar.m_sName;
        Person._ShortName = Person._bar.m_ShortName;
        Person._firstName = Person._bar.m_FirstName;
        Person._lastName = Person._bar.m_LastName;
        Person._Unit = Person._bar.m_Unit;
        Person._securityGroups = Person._bar.m_Rank;
        Person._height = '6.0 ft';
        Person._weight = '280lbs';
        Person._hairColor = 'Brown/gray';
        Person._photoURL = 'www.photourl.com';
        Person._facebookID = 'Krullwarking@yahoo.com';
        Person._emailAddress = Person._bar.m_Email;
        Person._phoneNumber = Person._bar.m_Phone;
        Person._Fax = Person._bar.m_Fax;
        Person._NetworkName = Person._bar.m_RegnetName;
        Person._ID = Person._bar.m_UserID;
        Person._Address = Person._bar.m_Address;
        Person._City = Person._bar.m_City;
        Person._State = Person._bar.m_State;
        Person._Zip = Person._bar.m_Zip;
        Person._Title = Person._bar.m_Title;
    }
},
wholeName : function()
    {
    return this._firstName + ', ' + this._lastName; 
    },

// constructor
loadPerson : function(ID){
    Person._ID = ID;
    Person.getAjaxData('getUser.asp?uid='+ID);
},


setFirstName : function(fname) {
    Person._firstName = fname;
    return true;
},
// add the methods to the prototype so that all of the 
// Foo instances can access the private static
getFirstName : function() {
    return Person._firstName;
}
}
Student = {

superClass:Person,
sayHello : function(){  alert('hi, I am a student, and my name is '+this.superClass.wholeName());} 
}
Student.superClass.loadPerson(105745);
Student.sayHello();
{
    foo: "bar"
}

这很好,但仅在IE中工作,因为activex引用了xmlHTTP。每次我试图让importHTML变量调用this.getXmlRequestObj或Person.getXmlRequestObj时,它都不起作用……我该怎么做

首先,将
importHTML
设置为ActiveX,而不是像对另一个变量
importHTML2
那样设置跨浏览器方式。这将是一个问题

第二个问题是同步请求不会触发
onreadystatechange
事件

Person.importHTML.onreadystatechange = Person.handleDataArrived; <-- not going to work

另请注意,从服务器返回的JSON对象不是有效的JSON。用于查看错误。但是,由于您使用的是
eval()
而不是JSON.js或
JSON.parse()
,因此您可以不受惩罚

您的问题是从未使用过
getXmlRequestObj
。我猜你第一次尝试做的是

...
innerHTML: Person.getXmlRequestObj(),
...
但这不起作用,因为不能在对象自己的对象文字定义中引用对象的属性。相反,您可以创建一个一次性初始化函数,用于设置
importHTML
,在对象定义之后立即调用该函数

var Person = {
    ...
    initialize: function() {
        Person.importHTML = Person.getXmlRequestObj();
    }
    ...
}
Person.initialize();
编辑:

您的JSON没有带引号的键。JavaScript非常乐意拥有这样的对象:

var Person = {
//Private members

getXmlRequestObj : function() {
        if (window.XMLHttpRequest) {
            importHTML2: new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            importHTML2: new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            importHTML2: "Your Browser needs an upgrade";
        }
    },


//Set up the global content retrieval object
//called importHTML
importHTML:  new ActiveXObject("Microsoft.XMLHTTP"),



getAjaxData:function(sUrl) {
    if (Person.importHTML.readyState == 4 || Person.importHTML.readyState == 0) {
        Person.importHTML.open("GET", sUrl, false);// make it wait for the response
        Person.importHTML.onreadystatechange = Person.handleDataArrived; 
        Person.importHTML.send(null);
    }       
},

//Called when the AJAX response is returned from any operation
//that lists handleContentArrived as its onreadystatechanged event
//for importHTML eg:importHTML.onreadystatechange = handleContentArrived; .
handleDataArrived: function() {
    if (Person.importHTML.readyState == 4) {
        Person._bar = eval("("+Person.importHTML.responseText+")");
        Person._sName = Person._bar.m_sName;
        Person._ShortName = Person._bar.m_ShortName;
        Person._firstName = Person._bar.m_FirstName;
        Person._lastName = Person._bar.m_LastName;
        Person._Unit = Person._bar.m_Unit;
        Person._securityGroups = Person._bar.m_Rank;
        Person._height = '6.0 ft';
        Person._weight = '280lbs';
        Person._hairColor = 'Brown/gray';
        Person._photoURL = 'www.photourl.com';
        Person._facebookID = 'Krullwarking@yahoo.com';
        Person._emailAddress = Person._bar.m_Email;
        Person._phoneNumber = Person._bar.m_Phone;
        Person._Fax = Person._bar.m_Fax;
        Person._NetworkName = Person._bar.m_RegnetName;
        Person._ID = Person._bar.m_UserID;
        Person._Address = Person._bar.m_Address;
        Person._City = Person._bar.m_City;
        Person._State = Person._bar.m_State;
        Person._Zip = Person._bar.m_Zip;
        Person._Title = Person._bar.m_Title;
    }
},
wholeName : function()
    {
    return this._firstName + ', ' + this._lastName; 
    },

// constructor
loadPerson : function(ID){
    Person._ID = ID;
    Person.getAjaxData('getUser.asp?uid='+ID);
},


setFirstName : function(fname) {
    Person._firstName = fname;
    return true;
},
// add the methods to the prototype so that all of the 
// Foo instances can access the private static
getFirstName : function() {
    return Person._firstName;
}
}
Student = {

superClass:Person,
sayHello : function(){  alert('hi, I am a student, and my name is '+this.superClass.wholeName());} 
}
Student.superClass.loadPerson(105745);
Student.sayHello();
{
    foo: "bar"
}
但是JSON规范更严格。它要求引用对象键,如下所示:

{
    "foo": "bar"
}

eval
执行JavaScript,因此它接受更宽松的语法
JSON.parse
和大多数其他JSON实用程序只接受严格的语法。

哎呀,我把函数也弄得一团糟,它过去常说returnnewXMLHttpRequest();等等……哦,还有什么我在这里做的蠢事吗?你可以使用问题底部的“编辑”链接来更正你的代码。把你的JSON放进去,看看错误。创建XMLHttpRequest的方式很奇怪。您是否考虑过使用跨浏览器ajax库,例如jQuery?这非常有效。。。我去了jsonlint.com,试图让它开心,但没有成功。我的JSON有什么问题吗?@KrullWarKing我用一个简短的JSON解释编辑了我的答案。如果您还有更多问题,请随时打开有关堆栈溢出的新问题。