无法通过Ajax将Javascript数组传递给PHP

时间:2014-08-28 12:03:55

标签: javascript php jquery arrays ajax

我在这么简单的问题上撕掉了我的头发。我有以下JS数组:

    var orderDetailsArray = new Array();
    orderDetailsArray[0] = 'test 1';
    orderDetailsArray[1] = 'test 2';
    orderDetailsArray[2] = 'test 3';
    orderDetailsArray[3] = 'test 4';

然后我有以下Ajax代码将此数组发送到PHP文件

    $.ajax({  
       type: "POST",
       url: 'http://testdomain.com/file.php',
       data: JSON.stringify(orderDetailsArray),
       contentType: "application/json",
       success: function(data) {
            alert(data);
       }
    });

在我的PHP文件中,我有以下

   $orderDetailsArray   = json_decode($_POST['orderDetailsArray']);                     
   echo $orderDetailsArray[0];  

但由于某种原因alert(data)总是只返回空白。我不知道为什么这不会返回正确的值。

任何帮助都会非常棒。

由于

8 个答案:

答案 0 :(得分:4)

在发送数组之前,您没有在客户端命名数组,因此$_POST整个就是这个数组,$_POST['orderDetailsArray']未定义。

您必须将其命名为客户端:

$.ajax({  
   type: "POST",
   url: 'http://testdomain.com/file.php',
   data: {
       orderDetailsArray: JSON.stringify(orderDetailsArray)
   },
   contentType: "application/json",
   success: function(data) {
        alert(data);
   }
});

答案 1 :(得分:1)

data: { orderDetailsArray: JSON.stringify(orderDetailsArray)}

答案 2 :(得分:1)

您的帖子数据是一个键值对,因此您无法通过php中的via键访问。

使用php输入流:

$orderDetailsArray   = json_decode(file_get_contents('php://input'));

在你的ajax中设置一个键:

data: { orderDetailsArray: JSON.stringify(orderDetailsArray)}

答案 3 :(得分:1)

您应该像这样声明array,然后可以直接传递ajax。 (无需stringify

var orderDetailsArray = {};
orderDetailsArray[0] = 'test 1';
orderDetailsArray[1] = 'test 2';
orderDetailsArray[2] = 'test 3';
orderDetailsArray[3] = 'test 4';

$.ajax({  
    type: "POST",
    url: 'http://testdomain.com/file.php',
    data: {'order_details':orderDetailsArray},
    contentType: 'application/x-www-form-urlencoded',
    success: function(data) {
        alert(data);
    }
});

答案 4 :(得分:0)

没有dataType

data: {orderDetailsArray :orderDetailsArray},

with dataType

dataType: "json",
data: JSON.stringify({orderDetailsArray:orderDetailsArray}),

答案 5 :(得分:0)

你不能直接传递这个值,你需要将它分配给"键"像这样

data: {'arr':JSON.stringify(orderDetailsArray)},

并在php端访问相同的

$orderDetailsArray = json_decode($_POST['arr']);

<强>参考:

http://api.jquery.com/jQuery.ajax/

快乐编码:)

答案 6 :(得分:0)

问题在于提交的数据。在服务器端,没有指定数据 $_POST['orderDetailsArray']

将您的ajax更改为:

$.ajax({  
       type: "POST",
       url: 'http://testdomain.com/file.php',
       data: 'orderDetailsArray='+JSON.stringify(orderDetailsArray),
       contentType: "application/json",
       success: function(data) {
            alert(data);
       }
    });

答案 7 :(得分:-1)

尝试更改数据:     data:JSON.stringify(orderDetailsArray)

// by

data: {orderDetailsArrayData:orderDetailsArray}

data: JSON.stringify({orderDetailsArrayData:orderDetailsArray})

//在php中

$orderDetailsArray   = $_POST['orderDetailsArrayData'];                     
echo $orderDetailsArrayData[0];

or 

$orderDetailsArray   = json_decode($_POST['orderDetailsArrayData']); 
echo $orderDetailsArrayData[0];