我正在尝试回显一个结构类似于json的字符串,但是jquery ajax帖子无法正确解析它。我想知道的是,这个字符串是否会像 jquery json 解析中的 json 一样被视为 json,就像我们回显json_encode一样。
echo '{"mobno":'.$mobno.',"charge":'.$charge.',"capacity":'.$capacity.'}';
阿贾克斯代码:
jQuery.ajax({
type: "POST",
url: "file.php",
data: { type: $(this).val(), amount: $("#amount").val()},
cache: false,
success: function(response){
var Vals = JSON.parse(response);
if(!Vals){
alert("Error1");
}else{
var capacity = parseInt(Vals.capacity);
if(capacity>0){
alert("worked1");
}else{
alert("worked2");
}
}
}
});
我没有收到 3 个警报中的任何一个警报。
根据您的编辑和评论,您的 json 字符串是正确的。您只需要更改 AJAX 请求即可。
如果希望 json 对象作为来自服务器的响应,请在 AJAX 请求中添加此设置dataType: "json"
。
所以你的 AJAX 请求应该是这样的:
jQuery.ajax({
type: "POST",
url: "file.php",
data: { type: $(this).val(), amount: $("#amount").val()},
cache: false,
dataType: "json",
success: function(response){
// you can access json properties like this:
// response.mobno
// response.charge
// response.capacity
var capacity = response.capacity;
if(capacity > 0){
alert("worked1");
}else{
alert("worked2");
}
}
});
为了让 JavaScript 可以区分字符串和 json 的属性,请使用双引号来开始和结束字符串,对于 json 属性,请使用单引号,反之亦然。试试看,如果你想不通,请告诉我。
正如其他答案所建议的那样,您需要修复 Web 服务在响应中发回的 JSON 的引号。
关于你的问题,响应中发回的所有内容实际上都是一个字符串。一旦它到达,您需要决定如何处理它。
允许客户端和服务器端程序了解发送内容的方法之一是设置正确的内容类型标头。
对于 JSON,最好的方法是将内容类型标头设置为"application/json"。如果你使用的是php,你可以这样做:
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
在客户端jquery ajax上,你可以这样做:
$.ajax({
dataType: "json",
url: url,
data: data,
success: function(data, textStatus, jqXHR){}
});
在此示例中,传递给"success"回调函数的"data"参数已经是一个js对象(在JSON.parse之后(。这是由于在 ajax 声明中使用了"数据类型"参数。
或者,您可以手动执行此操作并编写一个简单的 $.post,该 $post 接收一个字符串并自己执行 JSON.parse。
也许您应该首先自己进行手动解析,并在解析前后使用控制台.log(data(,这样您就会知道自己做对了。然后,继续使用自动方式,将"数据类型"设置为"json"。
请参阅@Rajdeep Paul 的 JSON 字符串更正。然后,将response
JSON 对象重新映射到数组。
杰伦字符串
echo "{'"mobno'":'"".$mobno."'",'"charge'":'"".$charge."'",'"capacity'":'"".$capacity."'"}";
阿贾克斯
$.ajax({
type: "POST",
url: "file.php",
data: { type: $(this).val(), amount: $("#amount").val()},
cache: false,
success: function(response){
// map JSON object to one-dimensional array
var Vals = $.map( JSON.parse(response), function(el) { return el });
if(!Vals){
alert("Error1");
}else{
var count = parseInt(Vals.length);
if(count>0){
alert("worked1");
}else{
alert("worked2");
}
}
}
});
参考:将 JSON 对象转换为 JavaScript 数组