小白请问 这段 jq ajax 总是无法正常提交数据,请问怎么修改 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yeshang
V2EX    Javascript

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

  •  
  •   yeshang 2017-11-10 11:29:53 +08:00 2317 次点击
    这是一个创建于 2970 天前的主题,其中的信息可能已经有所发展或是发生改变。
    $('#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 条附言    2017-11-10 13:12:23 +08:00
    小白 [掩面哭笑]
    问题解决了. 感谢楼下所有朋友的帮助. 非常感谢
    12 条回复    2017-11-10 13:09:34 +08:00
    LeeSeoung
        1
    LeeSeoung  
       2017-11-10 11:35:29 +08:00
    - -为啥不看下 error 报错的 result 是啥?或者直接用 F12。。
    yeshang
        2
    yeshang  
    OP
       2017-11-10 11:56:07 +08:00
    @LeeSeoung result 返回 {"readyState":4,"responseText":"Array\n(\n)\n","status":200,"statusText":"OK"}
    meszyouh
        3
    meszyouh  
       2017-11-10 12:08:33 +08:00
    @yeshang contentType 默认就行了
    yeshang
        4
    yeshang  
    OP
       2017-11-10 12:14:40 +08:00
    @meszyouh 把 contentType 这行删了还是不行啊. 提示 error {"readyState":4,"responseText":"Array\n(\n [{\"thing_box_weight\":\"r\",\"box_weight\":\"7\",\"sku\":\"1003416\"}] => \n)\n","status":200,"statusText":"OK"}
    meszyouh
        5
    meszyouh  
       2017-11-10 12:22:44 +08:00
    试试 把 print_r 改成 echo
    EvilCult
        6
    EvilCult  
       2017-11-10 12:28:33 +08:00   1
    我深深的怀疑是这里写错了。
    print_r($_POST); ----------> print_r( json_encode( $_POST ) );
    dangyuluo
        7
    dangyuluo  
       2017-11-10 12:30:28 +08:00
    @EvilCult print_r 就是打印数组的
    dangyuluo
        8
    dangyuluo  
       2017-11-10 12:37:08 +08:00
    说实话,虽然我经常用 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 返回的是一个对象,而不是数组。
    EvilCult
        9
    EvilCult  
       2017-11-10 12:41:22 +08:00
    @dangyuluo 我懂。
    楼主的 ajax 里这一段「 dataType:"json"」,指定预期服务器传输回来的数据是 json。
    然后 PHP 直接 print_r 了一段数组,传输回来是无法解析的。
    我怀疑用开发者工具看一下的话,应该报错的“对象无法解析”还是啥来着??忘了~
    picone
        10
    picone  
       2017-11-10 12:46:05 +08:00
    @EvilCult #9 问题是在于,$_POST 里面放的只会是 application/x-www-form-urlencoded 或 multipart/form-data 解析的内容。传送门 http://php.net/manual/zh/reserved.variables.post.php
    EvilCult
        11
    EvilCult  
       2017-11-10 13:02:19 +08:00
    @picone
    哦对。。多谢指正。
    如此说来,「 contentType:"application/json"」这一段还应该删掉。或者换成「 contentType:"application/x-www-form-urlencoded"」,「 contentType:"multipart/form-data"」
    dd0754
        12
    dd0754  
       2017-11-10 13:09:34 +08:00   1
    js 去掉
    contentType:"application/json",

    php 改为
    echo json_encode($_POST);
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2055 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:11 PVG 00:11 LAX 08:11 JFK 11:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86