【问题标题】:passing structured data to php via post通过 post 将结构化数据传递给 php
【发布时间】:2012-07-06 04:08:14
【问题描述】:

假设我有以下数据:

var arr = [], arr1 = [], arr2 = [], arr3 = [], arr4 = [];
var a = 'something', b = 'else';
arr1['key1-1'] = 'value1-2';
arr1['key1-2'] = 'value1-2';
for (var i = 0; i < someCond; i++) {
    arr = [];
    arr['key2-1'] = 'value2-1';
    arr['key2-2'] = 'value2-2';
    arr2.push(arr);
}

现在我需要将它的漏洞传递给一个 php 脚本。

我将它打包成一个变量,如下所示:

var postVar = {
    a: a,
    b: b,
    arr1: arr1,
    arr2: arr2
};

我正在使用 jQuery,所以我尝试这样发布:
1)

//Works fine for a and b, not for the arrays
$.post('ajax.php', postVar, function(response){});

还有这个:
2)

var postVar = JSON.stringify(postVar);
$.post('ajax.php', {json: postVar}, function(response){});

用php文件

$req = json_decode(stripslashes($_POST['json']), true);

这也不起作用。

我应该如何构造/格式化我的数据以将其发送到 PHP?

谢谢

编辑:
情况1: 控制台.log(postVar);

PHP print_r($_POST) 响应: 大批 ( [a] => 某事 [b] => 其他 )

如你所见,php端没有数组(对象)。

案例 2:
当我添加以下内容时:

postVar = JSON.stringify(postVar); 控制台.log(postVar);

我明白了
{"a":"something","b":"else","arr1":[],"arr2":[[],[],[]]}
使用 console.log(postVar)

所以这似乎是这种情况下的问题......对吧?

【问题讨论】:

  • 为什么要在此处放置斜杠?
  • 您是否检查过 PHP 是否正在获取数据?即只需将print_r($_POST) 放入PHP 文件中。还要检查控制台是否有任何提示。
  • 请检查你的服务器上是否正在运行magic_quotes,它会与json混淆
  • 请注意,您的“数组”不是数组而是对象。 PHP 和 Javascript 在这个意义上是完全不同的。 arr1['key1-1'] 基本上是在您的数组对象上设置一个名为 key1-1 的属性。请详细说明“不起作用”。有错误吗?您如何尝试访问$req?还要检查浏览器开发人员工具中的网络选项卡。您需要知道发送到服务器的实际数据是什么。
  • 不要在帖子中使用 HTML
     标签,使用正常的 Markdown 格式。

标签: php javascript post


【解决方案1】:

你应该在添加这样的stripslashes之前检查magic_quotes

if( get_magic_quotes_gpc() ) {
    $jsonString = stripslashes( $jsonString );
}
$data = json_decode( $jsonString );

我建议你应该关闭魔术引号......这根本不是魔术

【讨论】:

    【解决方案2】:

    事实证明,虽然数组 对象,但 JSON.stringify 会忽略数组上的非数组属性。所以我不得不将所有变量显式声明为对象。除了真正用作数组的arr2。

    完整代码如下:

    var arr = {}, arr1 = {}, arr2 = [];
    var a = 'something', b = 'else';
    arr1['key1-1'] = 'value1-2';
    arr1['key1-2'] = 'value1-2';
    for (var i = 0; i < 3; i++) {
        arr = {};
        arr['key2-1'] = 'value2-1';
        arr['key2-2'] = 'value2-2';
        arr2.push(arr);
    }
    
    var postVar = {
        a: a,
        b: b,
        arr1: arr1,
        arr2: arr2
    };
    
    
    postVar = JSON.stringify(postVar);
    $.post('ajax.php', {json: postVar}, function(response){});
    

    在 PHP 方面:

    $req = json_decode($_POST['json'], true);
    print_r($req);
    


    希望这可以帮助其他有同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-18
      • 2018-10-03
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多