我正在尝试回显一个像json一样构造的字符串,但jquery ajax post无法正确解析它。我想知道的是,如果这个字符串在jquery json parse中被视为json,就像我们回显一个json_encode一样。
echo '{"mobno":'.$mobno.',"charge":'.$charge.',"capacity":'.$capacity.'}';
ajax代码:
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中收到任何警报。
答案 0 :(得分:2)
根据您的edit和评论,您的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");
}
}
});
答案 1 :(得分:0)
因此JavaScript可以使json的字符串和属性不同,请使用双引号开始和结束字符串,json属性使用单引号,反之亦然。尝试一下,如果你想不出来就告诉我。
答案 2 :(得分:0)
正如其他答案所示,您需要修复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){}
});
在这个例子中,"数据"参数传递给"成功"回调函数已经是一个js对象(在JSON.parse之后)。这是因为使用了" dataType" ajax声明中的参数。
或者,您可以手动执行此操作并编写一个简单的$ .post,它接收一个字符串并自行执行JSON.parse。
也许您应该首先自己进行手动解析,并在解析之前和之后使用console.log(数据),以便您知道自己正确地进行了解析。然后,使用" dataType"进入自动方式。设置为" json"。
答案 3 :(得分:0)
请参阅@Rajdeep Paul的JSON字符串更正。然后,将response
JSON对象重新映射到数组。
JSON字符串
echo "{\"mobno\":\"".$mobno."\",\"charge\":\"".$charge."\",\"capacity\":\"".$capacity."\"}";
<强>的Ajax 强>
$.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");
}
}
}
});