【问题标题】:send and decode JSON array发送和解码 JSON 数组
【发布时间】:2012-07-12 13:59:52
【问题描述】:

我正在尝试对 JSON 数组进行编码并将其发送到 php 页面并将其添加到 mysql:

var data = $('form').serialize();
$.ajax({
    type: 'POST',
    url: 'naujas.php',
    dataType: 'json',
    data: ({
        json: JSON.stringify(data)
    }),
    success: function () {
        $('#naujas').load('naujas.php');
    }
});

但我认为它不起作用我从 php 得到这样的响应:pav=1&ppav=2&kiekis=3&kaina=4d&ppav=5&kiekis=6&kaina=7&ppav=8&kiekis=9&kaina=0

php 文件

<?php
    $json = json_decode($_POST['json']);
    echo $json;
?>

我做错了什么?

【问题讨论】:

  • .serialize() 给你一个查询字符串,.serializeArray() 可能更接近你想要的

标签: php ajax arrays json


【解决方案1】:

试试这样:

var data = $('form').serializeArray().reduce( function(obj,cur){
    obj[cur.name] = cur.value;
    return obj;
},{});

解释

  • .serializeArray() 返回一个数组,其结构如下:

    [ {name:"inputname1",value:"inputvalue1"},
      {name:"inputname2",value:"inputvalue2"},
      //---------------------------------------
      {name:"inputnamen",value:"inputvaluen"} ]
    
  • .reduce() 函数将该数组转换为对象:

    { "inputname1":"inputvalue1",
      "inputname2":"inputvalue2",
      //---------------------------------------
      "inputnamen":"inputvaluen" }
    

【讨论】:

  • 您编辑的代码只给了我最后一个表单字段值而不是所有数组。
  • @OsvaldaKazlaučiūnaitė 所以你有多种表格?我理解对了吗?
  • 好吧,表单是其中之一,但我可以添加其他行设置
  • @OsvaldaKazlaučiūnaitė 确保当您添加/删除/修改新的输入元素时,这些元素位于form 标签内
【解决方案2】:

dataType: 'json' 已经告诉 jQuery 以 json 格式发布数据。

您需要做的就是发布您的数据,如下所示:

data: (data),

问题来自将您的对象转换为字符串表示形式(字符串化)。

【讨论】:

  • dataType 指定 response-body 类型,而不是 request-body 类型!
  • 如果你只做数据:数据,你可能会遇到像我在这里遇到的类似问题:stackoverflow.com/questions/11385668/…
  • @Engineer:赞成,你是对的,我的回答还是偏离了轨道,我误解了 OP 的问题。
【解决方案3】:

您可能需要使用 php stripslashes

http://php.net/manual/en/function.stripslashes.php

我觉得是这样的

json_decode(stripslashes($_POST['json']));

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多