ajax POST json对象给PHP,PHP如何接收值 本帖最后由 KtosMayCry 于 2014-07-04 20:30:03 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、JQuery如何把serializeArray()获取到的json对象转换为 第二种格式的json字符串 且保证中文不会乱码保证不乱码,需要在header加入<meta http-equiv="content-type" content="text/html; charset=utf-8">第二种数组格式var fields = $("#rss_form").serializeArray();var t = {};t['data'] = fieldsfields = JSON.stringify(t);2、或者php如何直接接收 json对象 或者 第一种格式的 json字符串用第一种json字符串提交例子:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title> js test </title> </head> <body> <script type="text/javascript"> var fields = [{ "name":"中文" , "value":"中文" },{ "name":"中文" , "value":"中文" },{ "name":"中文" , "value":"中文" }]; fields = "data=" + JSON.stringify(fields); $.ajax({ type: "POST", url : "demo.php", data: fields, success: function(msg){ alert(msg); } }); </script> </body></html>demo.php<?php$data = $_POST['data'];file_put_contents('test.log', $data, true);echo "ok";?>运行后:test.log内容为[{"name":"中文","value":"中文"},{"name":"中文","value":"中文"},{"name":"中文","value":"中文"}]如果没有加<meta http-equiv="content-type" content="text/html; charset=utf-8"> 则会乱码。 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<xmp><?phpecho $s = print_r($_POST, 1);var_dump('is utf-8 ?', mb_check_encoding($s, 'utf-8'));html 端<script src=scripts/jquery-1.11.0.min.js></script><script src=scripts/json2.js></script><script>$(function() { $("#save_config_btn").click(function(){ var fields = $("#rss_form").serializeArray(); fields = JSON.stringify(fields); $.ajax({ cache: false, type: "POST", url : "jq_server.php", data: {data : fields}, //注意这里的写法 success: function(msg){ alert(msg); } }); });});</script><form id='rss_form'><input type=text name='比尔' value='大门'></br><input type=text name='乔治' value='布什'></br><input type=text name='托马斯' value='卡特'></br><input type=button id=save_config_btn value='ok'></form>去掉 fields = JSON.stringify(fields); 后把 var fields = $("#rss_form").serializeArray();改为 var fields = $("#rss_form").serialize();把 data: {data : fields},还原成 data: fields,既然你是在学习 jquery 的 ajax 的使用,那么就该多做一些测试 php 如何做flashpaper自动将.doc格式转换.swf格式浏览,求解 想实现一种效果,大家帮忙看下 php 4.3版本可以使用mysqi嘛? phpmail发gmail邮件出错 php问题 为什么一个网站中很多链接地址都是一样的呢? 关于图片从数据库中读出的问题 请问用form传递过来的指挥自动赋值给同名变量吗? 如何关闭分拦? 请问能在WINDOWS下用MYSQL吗? 大神看下这个导航菜单在smarty里怎么循环出来呢? 求同一列不同条件形成的两行的时间差的sql语句
<meta http-equiv="content-type" content="text/html; charset=utf-8">第二种数组格式
var fields = $("#rss_form").serializeArray();
var t = {};
t['data'] = fields
fields = JSON.stringify(t);2、或者php如何直接接收 json对象 或者 第一种格式的 json字符串
用第一种json字符串提交例子:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<title> js test </title>
</head> <body>
<script type="text/javascript">
var fields = [{ "name":"中文" , "value":"中文" },{ "name":"中文" , "value":"中文" },{ "name":"中文" , "value":"中文" }];
fields = "data=" + JSON.stringify(fields);
$.ajax({
type: "POST",
url : "demo.php",
data: fields,
success: function(msg){
alert(msg);
}
});
</script> </body>
</html>demo.php<?php
$data = $_POST['data'];
file_put_contents('test.log', $data, true);
echo "ok";
?>
运行后:
test.log内容为[{"name":"中文","value":"中文"},{"name":"中文","value":"中文"},{"name":"中文","value":"中文"}]
如果没有加<meta http-equiv="content-type" content="text/html; 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<xmp>
<?php
echo $s = print_r($_POST, 1);
var_dump('is utf-8 ?', mb_check_encoding($s, 'utf-8'));html 端<script src=scripts/jquery-1.11.0.min.js></script>
<script src=scripts/json2.js></script>
<script>
$(function() {
$("#save_config_btn").click(function(){
var fields = $("#rss_form").serializeArray();
fields = JSON.stringify(fields);
$.ajax({
cache: false,
type: "POST",
url : "jq_server.php",
data: {data : fields}, //注意这里的写法
success: function(msg){
alert(msg);
}
});
});
});
</script>
<form id='rss_form'>
<input type=text name='比尔' value='大门'></br>
<input type=text name='乔治' value='布什'></br>
<input type=text name='托马斯' value='卡特'></br>
<input type=button id=save_config_btn value='ok'>
</form>
去掉 fields = JSON.stringify(fields); 后把 var fields = $("#rss_form").serializeArray();
改为 var fields = $("#rss_form").serialize();
把 data: {data : fields},
还原成 data: fields,
既然你是在学习 jquery 的 ajax 的使用,那么就该多做一些测试