首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -> AJAX -> PHP

jQuery -> AJAX -> PHP
EN

Stack Overflow用户
提问于 2017-01-18 15:50:40
回答 2查看 64关注 0票数 1

我一直在寻找,但不幸的是,我找不到任何与我的问题有关的答案。

在我的PHP脚本中,我很难读取通过jQuery (ajax)发送的数据。

jQuery:

代码语言:javascript
复制
$('.sendOrder').click(function(){
    if (validateForm() == true) {

        (function($){
            var convertTableToJson = function()
                {
                    var rows = [];
                    $('table#productOverview tr').each(function(i, n){
                        var $row = $(n);
                        rows.push ({

                            productId:  $row.find('td:eq(0)').text(),
                            product:    $row.find('td:eq(1)').text(),
                            size:       $row.find('td:eq(2)').text(),
                            price:      $row.find('td:eq(3)').text(),
                            quantity:   $row.find('td:eq(4)').text(),
                        });
                    });
                    var orderObj = [];
                    orderObj.push({
                        name: $("#customerName").val(),
                        email: $("#customerEmail").val(),
                        phone: $("#customerPhone").val(),
                        order: rows
                    });
                    return orderObj;
                    console.log(orderObj);
                }
            $(function(){
                request = $.ajax({
                    url: 'shop/sendData.php',
                    type: 'POST',
                    dataType: 'json',
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify(convertTableToJson()),
                    success: function(ret) {
                        console.log(ret);
                    }
                });

当我查看Chrome时,它似乎与json一起正确发送:

代码语言:javascript
复制
    [  
   {  
      "name":"Kristian",
      "email":"kristian@example.com",
      "phone":"12345678",
      "order":[  
         {  
            "productId":"Prod #",
            "product":"Produkt",
            "size":"Str",
            "price":"Pris",
            "quantity":"Antall"
         },
         {  
            "productId":"09",
            "product":"Bokser",
            "size":"2 meter (249kr)",
            "price":"249,- eks mva",
            "quantity":"1 stk"
         },
         {  
            "productId":"09",
            "product":"Bokser",
            "size":"2 meter (249kr)",
            "price":"249,- eks mva",
            "quantity":"1 stk"
         }
      ]
   }
]

在我的sendData.php里,我已经很清楚了:

代码语言:javascript
复制
<?PHP header('Content-Type: application/json');
echo json_encode($_POST);

我得到的回报是:

[]

我做错了什么?我忘了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-18 16:35:32

使用file_get_contents("php://input")而不是post解决问题。

I.e

代码语言:javascript
复制
function isValidJSON($str) {
   json_decode($str);
   return json_last_error() == JSON_ERROR_NONE;
}

$json_params = file_get_contents("php://input");

if (strlen($json_params) > 0 && isValidJSON($json_params)) {
  $decoded_params = json_decode($json_params);

echo $decoded_params[0]->name;
}

“克里斯蒂安”

票数 0
EN

Stack Overflow用户

发布于 2017-01-18 16:00:13

$_POST需要一个标识符。在AJAX中,您必须提供一个,例如:

代码语言:javascript
复制
request = $.ajax({
              url: 'shop/sendData.php',
              type: 'POST',
              dataType: 'json',
              // note the change here, adding 'json' as the name or identifier
              data: { json: JSON.stringify(convertTableToJson())},
              success: function(ret) {
                    console.log(ret);
                }
           });

那么您应该能够在$_POST['json']中看到JSON字符串

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41723698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档