ホームページ >バックエンド開発 >PHPチュートリアル >ajax POST json オブジェクトを PHP に送信します。PHP はどのように値を受け取りますか

ajax POST json オブジェクトを PHP に送信します。PHP はどのように値を受け取りますか

WBOY
WBOYオリジナル
2016-06-23 13:54:371680ブラウズ

フロントエンド:

    $("#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、ここで上記の json の場合、POST の受信値に何を使用すればよいかわかりません。文字列が次の形式に変更されると、PHP は配列形式を受け入れて直接返すことができます
 {"data":[{ "name":"Bill" , "value":"Gates" },{ "name":"George" , "value":"Bush" },{ "name":"Thomas" , "value":"Carter" }]}

要約すると、主に 2 つの質問をしたいと思います:

1. JQuery は、serializeArray() によって取得された json オブジェクトをどのように変換しますか? 2 番目の形式の json 文字列を使用し、中国語が文字化けしないことを確認します

2. または、PHP が最初の形式の json オブジェクトまたは json 文字列を直接受け取る方法


ディスカッション (解決策) への返信

1. JQuery はどのように機能するのかSerializeArray() で取得した json オブジェクトを変換します。 これは 2 番目の形式の json 文字列であり、中国語が文字化けしないようにします

文字化けしないようにするには、ヘッダーに追加する必要があります
7b6742b1cabb6d79d1b6292f84ac95c5

2 番目の配列形式
var field = $("#rss_form").serializeArray();
var t = { 2. または、php は最初の形式で 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>

Demon.php
<?php$data = $_POST['data'];file_put_contents('test.log', $data, true);echo "ok";?>


実行後:
test.log 内容は [{"name":"中文","value":"中文"},{"name":"中文","value ":"中文"},{"名前":"中文","値 ":"中文"}]
If を追加しないと文字化けします。

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のキャッシュが影響する可能性を考慮して、$.ajax
      $.ajax({        cache: false,        type: "POST",
のパラメータとしてcache: falseを使用することができます
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>

フィールド = JSON.stringify(fields); を削除し、

var フィールド = $("#rss_form").serializeArray(); を
に変更します。 var field = $("# rss_form").serialize();
data: {data :fields},
to data:fields,


jquery の ajax の使用方法を学習しているので、さらにテストを行う必要があります

どうもありがとうございます はい、お二人ともご回答いただき、誠にありがとうございます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。