首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
华为云
V2EX  ›  JavaScript

小白请问 这段 jq ajax 总是无法正常提交数据,请问怎么修改

  •  
  •   yeshang · 340 天前 · 1073 次点击
    这是一个创建于 340 天前的主题,其中的信息可能已经有所发展或是发生改变。
    $('#submit').click(function() {
        event.preventDefault();//使自带的方法失效
        var d = {};
        var t = $('#form').serializeArray();
        $.each(t, function() {
          d[this.name] = this.value;
        });
        var data = JSON.stringify(d);
        $.ajax({
               type: "POST",
               url: "/s/a.php",
               contentType:"application/json",
               data: data,
               dataType:"json",
               success: function(result){
                  alert("Data Loaded: " + data);
               },
               error: function(result){
                  alert("error" + data);
               },
        });
      });
    

    总是提示 error + 提交的 json 数据. 如何才能让他成功提交

    /s/a.php 内容如下:

    <?php
        print_r($_POST);
    ?>
    
    第 1 条附言  ·  340 天前
    小白 [掩面哭笑]
    问题解决了. 感谢楼下所有朋友的帮助. 非常感谢
    12 回复  |  直到 2017-11-10 13:09:34 +08:00
        1
    LeeSeoung   340 天前
    - -为啥不看下 error 报错的 result 是啥?或者直接用 F12。。
        2
    yeshang   340 天前
    @LeeSeoung result 返回 {"readyState":4,"responseText":"Array\n(\n)\n","status":200,"statusText":"OK"}
        3
    meszyouh   340 天前
    @yeshang contentType 默认就行了
        4
    yeshang   340 天前
    @meszyouh 把 contentType 这行删了还是不行啊. 提示 error {"readyState":4,"responseText":"Array\n(\n [{\"thing_box_weight\":\"r\",\"box_weight\":\"7\",\"sku\":\"1003416\"}] => \n)\n","status":200,"statusText":"OK"}
        5
    meszyouh   340 天前
    试试 把 print_r 改成 echo
        6
    EvilCult   340 天前   ♥ 1
    我深深的怀疑是这里写错了。
    print_r($_POST); ----------> print_r( json_encode( $_POST ) );
        7
    dangyuluo   340 天前
    @EvilCult print_r 就是打印数组的
        8
    dangyuluo   340 天前
    说实话,虽然我经常用 PHP,但是有时候对别人“ PHP 是最好的语言”这种话没有一点反驳能力,因为平均来讲 PHPer 水平确实不如别人。不过看你说是小白求问,我也不苛责什么,毕竟以前我也在这个问题上困扰过。

    首先,网页里有一种东西叫表单,表单 post 数据的形式大致是这样:a=1&b=2&c=3。PHP 能够让你用$_POST 获取里面的 a,b,c 的原理,你可以简单的认为以&分割开,然后等号两侧分别赋值给 key 和 value,然后生成这个数组。

    你现在要 post 一个 json 字符串到服务器,肯定是不符合这种格式的,PHP 无法进行解析,然后就返回给你一个空$_POST 数组。你现在如果想在服务器上抓到这个 JSON 字符串,应该用:
    ```
    file_get_contents("php://input")
    ```
    这样才是获取 php 的原始输入值,然后你在 json_decode 就可以了。再提醒你,json_decode 返回的是一个对象,而不是数组。
        9
    EvilCult   340 天前
    @dangyuluo 我懂。
    楼主的 ajax 里这一段「 dataType:"json"」,指定预期服务器传输回来的数据是 json。
    然后 PHP 直接 print_r 了一段数组,传输回来是无法解析的。
    我怀疑用开发者工具看一下的话,应该报错的“对象无法解析”还是啥来着??忘了~
        10
    picone   340 天前
    @EvilCult #9 问题是在于,$_POST 里面放的只会是 application/x-www-form-urlencoded 或 multipart/form-data 解析的内容。传送门 http://php.net/manual/zh/reserved.variables.post.php
        11
    EvilCult   340 天前
    @picone
    哦对。。多谢指正。
    如此说来,「 contentType:"application/json"」这一段还应该删掉。或者换成「 contentType:"application/x-www-form-urlencoded"」,「 contentType:"multipart/form-data"」
        12
    dd0754   340 天前   ♥ 1
    js 去掉
    contentType:"application/json",

    php 改为
    echo json_encode($_POST);
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2339 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 11:41 · PVG 19:41 · LAX 04:41 · JFK 07:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1