V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
R18
0.06D
V2EX  ›  问与答

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

  •  
  •   R18 · Nov 15, 2016 · 1513 views
    This topic created in 3454 days ago, the information mentioned may be changed or developed.

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

    浏览器里面看一下请求包, chrome 的话还有 copy as curl 都是你的伙伴
    hanzichi
        3
    hanzichi  
       Nov 15, 2016
    贴下完整代码?(包括 HTML )
    R18
        4
    R18  
    OP
       Nov 15, 2016
    @ragnaroks
    @mcfog
    @hanzichi
    找到问题的原因了,input name 里带中文 就会触发
    ragnaroks
        5
    ragnaroks  
       Nov 16, 2016
    @R18 inputname? <input>的 name?
    R18
        6
    R18  
    OP
       Nov 16, 2016 via Android
    @ragnaroks 是滴……
    ragnaroks
        7
    ragnaroks  
       Nov 16, 2016
    @R18 <input name="用户名">这样?
    我一般不用 name 属性,都是直接用 id 序列化
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   812 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 22:26 · PVG 06:26 · LAX 15:26 · JFK 18:26
    ♥ Do have faith in what you're doing.