JavaScript/JQuery:对象属性存在问题

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

我正在使用JQuery调用$.ajax函数。被调用的php返回一个结构为varname=varvalue&varname2=varvalue2的字符串。我将把它分解,创建一个对象,使用varnames作为属性,varvalues作为这些属性的值。这是我的密码:

$.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语句来确保它们被删除。