V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
R18
V2EX  ›  问与答

PHP 解析 Formdata 的 Ajax,Post 请求异常,多解析出来一个单元

  •  
  •   R18 · 2016-11-15 10:54:14 +08:00 · 1226 次点击
    这是一个创建于 2963 天前的主题,其中的信息可能已经有所发展或是发生改变。

    JS 请求代码

    var formElement = document.getElementById("question");
    var data = new FormData(formElement);
    for(var pair of data.entries()) {
    console.log(pair[0]+ ', '+ pair[1]); 
    }
    $.ajax({
        url:"/home/question",
        type:"post",
        data:data,
        datatype:"json",
        contentType: false,  
        processData: false,
        success:function(data){
    

    打印结果

    手机喜好, 安卓
    网购频率, 几乎每天一
    网购单次时长, 0.5 小时以下
    网购费用, 200 元以下
    喜欢的音乐, 流行音乐
    喜欢的电影, 中国
    选择的装饰画种类, 大师名著
    旅行频率, 1 个月一次
    喜欢的季节, 春天
    

    PHP 部分代码

    public function question(){
        var_dump($_POST);
        if(!$this->input->is_ajax_request()){
        echo json_encode(array('success'=>'error','message'=>'The request is not Ajax'));
        return;
        }
    

    PHP 输出结果

    array(10) {
      ["手机喜好"]=>
      string(6) "安卓"
      ["网购频率"]=>
      string(15) "几乎每天一"
      ["网购单次时长"]=>
      string(15) "0.5 小时以下"
      ["网购费用"]=>
      string(12) "200 元以下"
      ["喜欢的音乐"]=>
      string(12) "流行音乐"
      ["喜欢的电影"]=>
      string(6) "中国"
      ["选择的装饰画种类"]=>
      string(12) "大师名著"
      ["旅行频率"]=>
      string(13) "1 个月一次"
      ["喜欢的季节"]=>
      string(6) "春天"
      [0]=>
      string(6) "春天"
    }
    

    不知道这个[0]是怎么回事,有人遇到过或者这是我哪里出错了么?

    7 条回复    2016-11-16 10:29:31 +08:00
    ragnaroks
        1
    ragnaroks  
       2016-11-15 11:36:08 +08:00
    我是 {param:JSON_String}
    后端 $param=json_decode($this->input->post('param'),TRUE);
    并不会出现$param->0.
    mcfog
        2
    mcfog  
       2016-11-15 11:50:31 +08:00
    查问题要先要分解,或者说控制变量,这里首先应该按照 http 协议划分一下,是 js 发出去的包异常还是 php 收到的包解析异常?如果是 JS 的话,是原生 JS 的问题还是 jQuery 封装的问题? PHP 侧同理

    浏览器里面看一下请求包, chrome 的话还有 copy as curl 都是你的伙伴
    hanzichi
        3
    hanzichi  
       2016-11-15 11:56:00 +08:00
    贴下完整代码?(包括 HTML )
    R18
        4
    R18  
    OP
       2016-11-15 14:39:38 +08:00
    @ragnaroks
    @mcfog
    @hanzichi
    找到问题的原因了,input name 里带中文 就会触发
    ragnaroks
        5
    ragnaroks  
       2016-11-16 09:23:48 +08:00
    @R18 inputname? <input>的 name?
    R18
        6
    R18  
    OP
       2016-11-16 09:25:55 +08:00 via Android
    @ragnaroks 是滴……
    ragnaroks
        7
    ragnaroks  
       2016-11-16 10:29:31 +08:00
    @R18 <input name="用户名">这样?
    我一般不用 name 属性,都是直接用 id 序列化
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:09 · PVG 22:09 · LAX 06:09 · JFK 09:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.