您好,欢迎访问一九零五行业门户网

ajax POST json对象给PHP,PHP如何接收值

前端:
$(#save_config_btn).click(function(){ $.ajaxsetup({ cache:false, contenttype : application/x-www-form-urlencoded; charset=utf-8 }); var fields = $(#rss_form).serializearray(); fields = json.stringify(fields) //中文会乱码 $.ajax({ type: post, url : edit.php, data: fields, success: function(msg){ alert(msg); } }); });
php:

通过 json.stringify 获取到的json格式如下:
[{ name:bill , value:gates },{ name:george , value:bush },{ name:thomas , value:carter }]
php,这里post的接收值不知道用什么,如果把上面的json字符串改成如下格式,那么php即可接受到并直接返回数组格式
{data:[{ name:bill , value:gates },{ name:george , value:bush },{ name:thomas , value:carter }]}
总结下主要想问两个问题:
1、jquery如何把serializearray()获取到的json对象转换为 第二种格式的json字符串 且保证中文不会乱码
2、或者php如何直接接收 json对象 或者 第一种格式的 json字符串
回复讨论(解决方案) 1、jquery如何把serializearray()获取到的json对象转换为 第二种格式的json字符串 且保证中文不会乱码
保证不乱码,需要在header加入
第二种数组格式
var fields = $(#rss_form).serializearray();
var t = {};
t['data'] = fields
fields = json.stringify(t);
2、或者php如何直接接收 json对象 或者 第一种格式的 json字符串
用第一种json字符串提交例子:
js test
demo.php

运行后:
test.log内容为[{name:中文,value:中文},{name:中文,value:中文},{name:中文,value:中文}]
如果没有加 则会乱码。
1、ajax 本身就是以 utf-8 编码传输,所以不需要再有 charset=utf-8 声明
2、jq 的 post 方式已经发了 application/x-www-form-urlencoded 头,也不需要你再劳动了
所以 $.ajaxsetup({ cache:false, contenttype : application/x-www-form-urlencoded; charset=utf-8 });
一段是不需要的。考虑的 ie 的缓存可能会影响效果,可以把 cache: false 作为 $.ajax 的参数 $.ajax({ cache: false, type: post,
3、json.stringify 是 json2.js 类库提供的,不属于 jq 的范畴。所以 jq 并不需要使用他来加工数据
况且 json.stringify 将对象(数组)转换成了 json 格式串,用它发送时,服务端还需解码
4、为了便于说明问题,我做了一个测试例
php 端 jq_server.php html 端
去掉 fields = json.stringify(fields); 后
把 var fields = $(#rss_form).serializearray();
改为  var fields = $(#rss_form).serialize();
把 data: {data : fields},
还原成 data: fields,
既然你是在学习 jquery 的 ajax 的使用,那么就该多做一些测试
太感谢了,非常感谢两位的解答
其它类似信息

推荐信息