我在AJAX Web应用程序中使用jquery-1.3.2。我使用jQuery ajax $.post()
方法向服务器提交请求。
在服务器上,我使用php构建一个数组,然后json_encode
答案。然后在客户端上,我使用AJAX post方法的回调函数来处理响应。
一切正常,直到我使用$.post()
方法将变量发送到服务器。如果我将变量发送到服务器,我得到的响应是[object Object],因此我无法解析它。我现在有一个解决方法,当发布变量时,我请求HTML响应,然后我解析它。
所以从我的网站获取的代码是:
Jax电话:
$.post("inc/sendfeedback.php", {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment}, function(data) {PostData(data);}, "json");
所以PostData代码如下所示:
function ProcessData(data)
{
//alert(data);
var jo = eval("(" + data + ")");
if(jo.result == "true")
{
if(jo.data != "" && jo.element != "")
{
$(jo.element).html(jo.data);
}
}
SMessage(jo.error);
}
如果我取消注释上面的代码,则其中包含[alert object]。
如果我从调用中删除Post变量,它可以正常工作。
服务器代码如下所示:
$arr = array ("result" => $result,"data" => $data,"error" => $error,"element" => $element);
echo(json_encode($arr));
这是jQuery库的一个错误,我试过1.2版本,但它仍然存在吗?我也搜索jQuery网站,找不到有这个问题的人。
所以我认为我错过了一些东西。但是什么?
答案 0 :(得分:5)
$.ajax({
url: "script.php",
global: false,
type: "POST",
data: {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment},
dataType: "json",
contentType: "application/json",
success: function(data){
alert(data.result);
}
}
在调用成功回调之前,不需要eval,jQuery evals / parses它。
eval =纯粹邪恶
答案 1 :(得分:1)
因为您使用的是关联PHP数组,所以json_encode将返回Javascript对象的字符串表示形式,而不是Javascript数组。但是,您仍然可以以与数组类似的方式处理它:
for (var key in data)
{
var item = data[key];
}
我强烈建议您下载Firefox + Firebug插件并使用console API来调试/转储服务器返回的内容。
答案 2 :(得分:0)
我已经注册,现在无法在没有声望的情况下发表评论到这个帖子,并且看不出任何简单的方法来声称这个问题是我的。
Deviant,你建议使用$ .ajax()方法。我第一次没有为我工作的原因是当服务器代码期待POST数据时我将帖子数据作为JSON对象提交。
所以我修正了我的javascript来正确调用服务器脚本,一切正常。
所以结论是,$ .post()方法中有一个错误。我没有追踪它,但3633行是post方法进行调用。我开始挖掘但是还没有找到问题。
我通过$ .ajax()对相同的服务器脚本以及相同的javascript处理响应的事实来限定这一点,并且一切正常,使用$ .post方法并且我的脚本失败并返回甚至返回对象似乎是一个有效的JSON对象。
感谢帮助人员。现在去除$ .ajax调用的所有$ .post调用。
所有这些的结果可以在www.pygames.net
上看到干杯 巴蒂尔 a.k.a FrogSkin