【问题标题】:How to pass JSON object to PHP如何将 JSON 对象传递给 PHP
【发布时间】:2016-03-26 12:31:31
【问题描述】:

我在下面有以下代码sn-p。单击“创建订单”按钮时,用户输入的数据(代码中未显示)通过函数“convertToJson”转换为 JSON。我能够将数据转换为 JSON。我的问题是将 JSON 对象传递给 PHP,以便我可以将对象插入数据库。当我运行 $var_dump 时 PHP 返回一个“Null”值。

请注意,我正在尝试发布到同一页面,即“orders.php”

     <head>
        <script type="text/javascript">
        function convertToJson()
        {
            var tableData = $('#productOrder').tableToJSON({
            ignoreColumns: [0]
            }); 

            var xhr = new XMLHttpRequest();
            xhr.open("GET","orders.php",true);
            xhr.setRequestHeader("Content-Type", "application/json");
            xhr.send(JSON.stringify(tableData));            
        }   
        </script>
     </head>
    ...more code...     

    <button type="button" class="btn btn-success btn-md" style="float: right;" onclick="convertToJson();">Create Order</button>
    <div>
    <?php
        $data = json_decode(file_get_contents('php://input'));
        var_dump($data);

    ?>
    </div>

【问题讨论】:

  • 检查请求是否被发送。

标签: php json ajax


【解决方案1】:

您应该使用实际的 ajax 请求来发布您的数据

        $.ajax({
            url: 'yourscript',
            type: 'POST',
            data: { data: tableData }
            dataType: "json",
            beforeSend: function() {
              //do something
            }
        }).done(function(msg){
            //do something when done
        }).fail(function(msg){
            //error handling
        }).complete(function(msg){
            //do something when completed
        });

    }

并使用 $_POST["data"] 获取数据

还请注意,如前所述,您需要注意脚本生命周期,因为您现在正在处理异步请求

【讨论】:

  • 可以发到同一个页面吗?
  • @wowomg 不,发布到同一页面会导致this
  • 确保您可以发布到同一个脚本。当然,您必须阅读数据并对其进行处理。请注意代码序列。然而,我的建议是将代码与视图完全分开,并在显式控制器函数中处理 ajax 请求
  • @SteVoi 如何将 AJAX 请求发布到包含 ajax 代码块的同一页面?我知道这是可以做到的,但并非没有一些远远超出大多数新手能力的重大挑战。在 ajax 代码块的 url: "secondary_page.php", 参数中指定辅助的、独立的 PHP 页面是迄今为止 OP 解决其问题的最简单方法,也是 90% 的编码人员会解决的方法。为什么你会说它可以在不指出这种方法的重大固有困难的情况下完成?
  • @gibberish:只需在脚本顶部处理 ajax 调用。再次,我不建议这样做,但如果你想它绝对可能: if(ajax_data) { do somehting } 脚本的其余部分。正确的方法是路由ajax调用做一个专用函数,返回回复并在实际脚本中使用JS处理回复。基本上就像你推荐的那样
猜你喜欢
  • 2016-08-03
  • 2015-10-06
  • 2016-12-21
  • 2012-06-02
  • 2014-06-12
  • 2020-03-21
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多