将 php 字符串作为 json 传递,以便由 jquery 接收
Passing php string as json to be received by jquery
我正在尝试回显一个结构类似于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 数组
- 为什么jQuery文件的函数中有两个参数,但只接收一个参数
- 发送和接收数据?Ajax、Jquery和PHP
- 选择使用 jQuery 接收 change() 事件的表单的提交按钮
- 使用jquery的$.POST()方法在PHP页面上未接收到数据
- 接收jquery函数发送的php文件上的数据
- 使用JQuery发布请求并接收多个答案(可能)
- 将从jquery接收的文件转换为字节数组
- 如何在 JavaScript 或 jQuery 中发送一个简单的数字并在 URL 中接收
- jQuery Form插件,如何从php接收数据
- 为什么我不能从jQuery(PHP)接收数据
- 如何在 jquery 成功方法中接收 JSON 并使用该 JSON 构建 HTML 内容
- 仅使用 jQuery .load() 接收图像的字节码
- 在 jQuery post 上接收带有 HTML 的回调
- 将 php 字符串作为 json 传递,以便由 jquery 接收
- jquery接收文本区域中键入的文本,并将其传递给后端处理程序(perl、php等)
- 当它通过Jquery接收焦点时打开下拉菜单
- 如何访问从JQuery接收的JSON响应中的数据
- 使用jQuery接收DataSet (xml)
- CometD前端使用jquery接收发布的数据
- 如何获得.js文件上下文jQuery $.接收时不执行Ajax