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


79

我想在PHP中操作JavaScript数组。可以做这样的事情吗?

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

活动是一维数组,例如:

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

尝试执行此脚本时无法完成...如何解决?


Answers:



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);

9

我知道回答这个问题可能为时已晚,但这对我很有用:

  1. 使用以下内容对您的JavaScript对象(json)进行字符串化 var st = JSON.stringify(your_object);

  2. 将您的POST数据作为“字符串”传递(也许使用jQuery: $.post('foo.php',{data:st},function(data){... });

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

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

多维数组和单个数组作为普通数组处理。要访问它们,只需执行常规操作即可$foo[4]

关联数组(javsacript对象)被视为php对象(类)。要访问它们,就像类一样:$foo->bar


2

我应该是这样的:

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


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

使用将数组操作数附加到所需变量名称的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');        
       }
});

注意活动[]周围的引号。这些值将如下可用:

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

0

这是因为PHP会将您的值读取为字符串。如果我不想将数据作为对象传递(就像前面的答案一样,也可以),我可以在PHP中执行以下操作:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

最后一行在每个逗号后将字符串拆分为位。现在$ activitiesArray也是一个数组。即使没有逗号(JavaScript数组中只有一个元素),它也可以工作。

祝您编码愉快!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.