本帖最后由 KtosMayCry 于 2014-07-04 20:30:03 编辑

解决方案 »

  1.   

    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'] = 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.   

    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>
    <?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 的使用,那么就该多做一些测试