在 jQuery ajax 调用中处理来自服务器端的响应
Posted
技术标签:
【中文标题】在 jQuery ajax 调用中处理来自服务器端的响应【英文标题】:Handling responses from server side in jQuery ajax calls 【发布时间】:2012-03-24 09:54:49 【问题描述】:我的代码有一个缺陷,我有点困惑。
$.ajax(
type: 'POST',
url: '/contact/index/add/',
data: $("#addContact").serialize(),
success: function(data, status, xhttp)
var response = eval ("[" + data + "]");
console.log(response.msg);
if ( response.success )
console.log( response.msg );
else
console.log( response.msg );
,
dataType: "html"
);
我正在寻找的是能够访问数组(以 JSON 格式编码)的响应,但是我在 console.log(response.msg) 行上得到“未定义”
如果我 console.log(response) 它显示(在萤火虫中)为:
[对象 成功=true, msg="test"]
请求正在发回以下字符串:
"成功":true,"msg":"测试" 这就是为什么我必须将响应包含在 [ ] 中以进行评估。
所以我很困惑的是:如何访问所述数组的属性。
我有的服务器端(php/zend框架)
echo Zend_Json_Encoder::encode(array('success'=>true,'msg'=>'test'));退出;
我需要做什么才能访问数组的键/值,如行中所示
if( response.success ) // do something
我需要修改服务器端还是javascript端?
【问题讨论】:
-- 更新 -- 对于初学者,我将 dataType 更正为 json,而不是 HTML,这解决了我的 [] 问题。 -- 第二次更新 -- 请忽略这个问题,这就是整个问题,我需要做的就是设置正确的数据类型。 【参考方案1】:您需要指定正确的dataType
。您应该指定 JSON 作为返回的数据类型:
dataType: 'json'
【讨论】:
是的,我希望有办法删除问题哈哈,我意识到我的错误。谢谢。【参考方案2】:dataType: "json"
并且不要使用 eval 来解析 json。使用 jQuery.parseJSON
【讨论】:
很高兴知道,谢谢...仍在学习 :) 有点担心 eval 语句。【参考方案3】:尝试把方括号换成普通的就是eval语句"(" +
...
【讨论】:
以上是关于在 jQuery ajax 调用中处理来自服务器端的响应的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 JavaScript 的每个请求向服务器端发送信息
实现启用 AJAX 的 WCF 服务 - 来自 JQuery 的调用没有响应
使用 Jquery $.ajax 在 Flask 上调用服务器端函数 [重复]