JavaScript/JQuery:对象属性存在问题
我正在使用JQuery调用$.ajax函数。被调用的php返回一个结构为varname=varvalue&varname2=varvalue2的字符串。我将把它分解,创建一个对象,使用varnames作为属性,varvalues作为这些属性的值。这是我的密码:JavaScript/JQuery:对象属性存在问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用JQuery调用$.ajax函数。被调用的php返回一个结构为varname=varvalue&varname2=varvalue2的字符串。我将把它分解,创建一个对象,使用varnames作为属性,varvalues作为这些属性的值。这是我的密码: $.ajax({ type:"POST", url:"/actions/savebbuilderdata.php", data:({step: stepNum, submi
$.ajax({
type:"POST",
url:"/actions/savebbuilderdata.php",
data:({step: stepNum, submitObj: saveObj}),
complete:function(jqXHR, textStatus){
var returnObj = new Object();
var returnArr = jqXHR.responseText.split("&");
for(i=0;i<returnArr.length;i++){
var tempArr = returnArr[i].split("=");
returnObj[tempArr[0]] = tempArr[1];
}
//For Testing that the values are infact being assigned
for(prop in returnObj){
alert(prop + ": " + returnObj[prop]);
}
alert(returnObj.returnText);
}
});
注意第二个for循环。我这样做只是为了获取对象中每个属性的警报。这将正常工作,并使用正确的值显示每个属性名称。返回的属性之一始终为“returnText”。然而,当我调用试图获取返回文本的最终警报时,我得到了“未定义”。知道为什么会这样吗?为什么不将数据作为json编码的数组返回呢?使用起来容易得多我看不出代码有多少错误,但也许这些可以帮助您识别问题。我会使用success而不是complete来确保问题不在信息传输中 我还将去参数化代码提取到一个单独的函数中,因为它更容易测试,而且看起来像是我要再次做的事情
String.prototype.deparameterize = function() {
var hsh = new Object;
var pairs = this.split("&");
for(i=0;i<pairs.length;i++){
var pair = pairs[i].split("=");
hsh[pair[0]] = pair[1];
}
return hsh;
}
$.ajax({
type:"POST",
url:"/actions/savebbuilderdata.php",
data:({step: stepNum, submitObj: saveObj}),
success:function(data, textStatus,jqXHR){
var obj = data.deparameterize();
alert(obj.returnText);
}
});
注意:扩展字符串并不总是最佳做法,但在这种情况下它可能会起作用。我建议您使用Firebug Firefox扩展,而不是第二个循环写入:console.dirreturnObj;returnText属性在您尝试自行发出警报之前是否在循环中得到正确的警报?我支持Firebug建议。您需要使用Firebug或Webkit的控制台工具来更详细地检查对象。完全有可能您有一个数据未定义的属性或其他正在发生的事情,您需要一个调试器来查看它。我确实使用Firebug。不知道为什么我不想用控制台。应该知道returnText属性返回时带有一些回车符,这很奇怪,因为php字符串中没有任何回车符。没什么大不了的。使用“替换”来移除它们,现在可以正常工作。谢谢你的意见。请查看我对我帖子中评论的回复。这实际上是我的php中返回回车的问题。我只需要添加一个replace语句来确保它们被删除。