如何在我的对象中获得跨浏览器ajax引用
how to get the cross browser ajax reference within my 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:'',
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();
这工作得很好,但只有在IE中,因为activex引用xmlHTTP。每次我尝试使importtml变量调用this。getXmlRequestObj或Person。getXmlRequestObj不工作.....我该怎么做呢?
你的问题是你从不使用getXmlRequestObj
。我猜你首先想做的是
...
innerHTML: Person.getXmlRequestObj(),
...
但是这不起作用,因为你不能在对象自己的对象字面定义中引用对象的属性。相反,您可以创建一个一次性初始化函数来设置importHTML
,您可以在对象定义之后立即调用该函数。
var Person = {
...
initialize: function() {
Person.importHTML = Person.getXmlRequestObj();
}
...
}
Person.initialize();
编辑:JSON没有带引号的键。JavaScript非常乐意拥有这样的对象:
{
foo: "bar"
}
但是JSON规范更严格。它要求对象键用引号括起来,像这样:
{
"foo": "bar"
}
eval
执行JavaScript,因此它接受更宽松的语法。JSON.parse
和大多数其他JSON实用程序将只接受严格的语法
首先将importHTML
设置为ActiveX,而不是像设置其他变量importHTML2
那样使用跨浏览器的方式。这是一个问题。
第二个问题是同步请求不会触发onreadystatechange
事件
Person.importHTML.onreadystatechange = Person.handleDataArrived; <-- not going to work
改成只调用
方法Person.handleDataArrived();
还有一个边注,从服务器返回的JSON对象不是有效的JSON。使用jsonlint.com查看错误。但是因为你使用的是eval()
而不是JSON.js或JSON.parse()
,你可以摆脱它。 相关文章:
- 如何通过ajax将png图片从服务器发送到浏览器中显示
- 当使用ajax并将html数据保存为对象时,收听浏览器返回按钮.好的或坏的
- 是否可以创建一个带有进度条的跨浏览器AJAX照片上传器
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- 为什么我从浏览器修改html/js时会多次发送ajax请求
- 当在coldfusion中通过AJAX传递时,FORM提交在IE浏览器中给出空表单
- 同步(阻塞)ajax调用是否可以阻塞浏览器'的UI
- javascript Ajax方法在不同的浏览器中有不同的结果
- 如果不刷新Rails中的浏览器,AJAX请求就无法看到效果
- 是浏览器在AJAX响应中自动处理的HTTP标头
- 阻止AJAX队列阻止浏览器
- 使用Javascript的Ajax请求在iPhone浏览器中不起作用
- ajax互联网浏览器onchange
- 在某些浏览器上,Ajax 调用停止
- AJAX 调用在获得响应并成功执行时会冻结浏览器一段时间
- 如何在没有JQuery的情况下,通过对服务器的基本ajax调用,根据浏览器上的用户活动保持服务器会话活动
- 当按下浏览器后退按钮时,如何用相同的post参数激发ajax请求
- 跨浏览器Ajax问题
- 将web应用程序建立在浏览器AJAX调用上是一种好做法吗?
- 如何在我的对象中获得跨浏览器ajax引用