通过jQuery $.ajax将JavaScript数组传递到PHP

82

我想在PHP中操作一个JavaScript数组。是否可以做到像这样的操作?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

Activities是一个类似于一维数组的数据结构:

var activities = ['Location Zero', 'Location One', 'Location Two'];

当我尝试这样做时,脚本没有完成... 我该如何修复?


9个回答

149
data: { activitiesArray: activities },

完成了!现在你可以在PHP中访问它了:

<?php $myArray = $_REQUEST['activitiesArray']; ?>

10
为什么这个答案这么难找到!?谢谢,这正是我所需要的。 - Vian Esterhuizen
像黑客一样简单!干得好!你让我笑了:D。 - Arashtad

12

在发送数组之前,您需要将其编码为JSON,否则您只会在另一端获得一些垃圾。

由于您要发送的只是该数组,因此您可以这样做:

data: { activities: activities }

这将为您自动转换数组。

有关详细信息,请参见此处


11

您需要将此转换为字符串。您可以使用JSON2库中的stringify方法来实现。

http://www.json.org/

http://www.json.org/js.html

代码大致如下:
var myJSONText = JSON.stringify(myObject);

所以

['Location Zero', 'Location One', 'Location Two'];

将变成:

"['Location Zero', 'Location One', 'Location Two']"

关于如何在服务器上处理这个问题,您需要请教PHP专家。我认为其他答案已经提出了一种解决方案。

类似的,数据也可以以相似的方式从服务器返回。即,您可以将其转换回一个对象。

var myObject = JSON.parse(myJSONString);

11

我知道回答这个问题可能已经太晚了,但是这个方法对我非常有效:

  1. 使用 var st = JSON.stringify(your_object); 把你的Javascript对象(JSON)转换为字符串。

  2. 将你的POST数据作为"string"(可能使用jQuery:$.post('foo.php',{data:st},function(data){... });)传递。

  3. 在服务器端进行数据解码处理:$data = json_decode($_POST['data']);

就是这样...你可以自由地使用你的数据。

多维数组和单一数组都可以像正常数组一样处理。要访问它们,只需像这样做:$foo[4]

关联数组(javascript对象)被处理为php对象(类)。要访问它们,只需像访问类一样访问:$foo->bar


2

我应该像这样:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })

1
使用PHP内置功能,将数组操作数附加到所需的变量名。
如果我们按照以下方式向Javascript数组添加值:
acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

它可以按以下方式发送到服务器:

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

注意activities[]周围的引号。值将按如下方式可用:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';

1
这对我有效:

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

这是关于您的PHP的内容:
$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}

1
使用 JQuery 的序列化函数。

http://docs.jquery.com/Ajax/serialize

序列化通常用于准备用户输入的数据以发布到服务器。序列化数据以标准格式呈现,与几乎所有服务端编程语言和框架兼容。

0
这是因为PHP将您的值读取为字符串。如果我不想将我的数据作为对象传递(就像之前的答案一样,也很好),我只需在我的PHP中执行以下操作:
 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

最后一行将字符串按逗号分割成位。现在$activitiesArray也是一个数组。即使没有逗号(您的JavaScript数组中只有一个元素),它也可以正常工作。

编码愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接