ajax post json对象给php,php如何接收值
本帖最后由 ktosmaycry 于 2014-07-04 20:30:03 编辑 前端:
$(#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,