我正在使用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'。但是,当我调用最终警报尝试获取returnText时,我得到'undefined'。任何想法为什么会这样?
答案 0 :(得分:0)
为什么不将数据作为json编码数组返回呢?
更容易使用答案 1 :(得分:0)
我看不出代码有多大错,但也许这些可以帮助您识别问题。我会使用success
代替complete
来确保问题不在于传输信息。
我还将deparameterize
代码提取到一个单独的函数中,因为它更容易测试,看起来像我会再做一些。
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);
}
});
注意:并不总是最好的做法来扩展String,但也许在这种情况下它可以工作。