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:
<?phpheader("Content-type: text/html; charset=UTF-8");$data = $_POST['data'];echo '<pre class="brush:php;toolbar:false">';print_r($data);?>
通过 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字符串提交例子:
<!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":"中文"}]
如果没有加 则会乱码。
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" });
$.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'));
<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 的使用,那么就该多做一些测试
太感谢了,非常感谢两位的解答

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Comment configurer Visual Studio Code (VS Code) pour le développement PHP
