通过jQuery $ .ajax将JavaScript数组传递给PHP
我想在PHP中操作JavaScript数组。 有没有可能做这样的事情?
$.ajax({ type: "POST", url: "tourFinderFunctions.php", data: "activitiesArray="+activities, success: function() { $("#lengthQuestion").fadeOut('slow'); } });
活动是一个单维数组,如:
var activities = ['Location Zero', 'Location One', 'Location Two'];
当我尝试这个脚本没有完成…我怎样才能解决它?
data: { activitiesArray: activities },
而已! 现在你可以在PHP中访问它:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
在发送之前,你需要将你的数组编码为JSON,否则你只会在另一端得到一些垃圾。
由于你发送的只是数组,你可以这样做:
data: { activities: activities }
它会自动为你转换数组。
详情请看这里 。
你需要把它变成一个string。 您可以使用JSON2库中的stringify方法来执行此操作。
代码看起来像这样:
var myJSONText = JSON.stringify(myObject);
所以
['Location Zero', 'Location One', 'Location Two'];
会变成:
"['Location Zero', 'Location One', 'Location Two']"
你将不得不引用一个PHP大师如何处理这个在服务器上。 我想这里的其他答案是一个解决scheme。
数据可以以类似的方式从服务器返回。 也就是说,你可以把它变成一个对象。
var myObject = JSON.parse(myJSONString);
我知道回答这个问题可能已经太晚了,但是这对我来说很有效:
-
用
var st = JSON.stringify(your_object);
将你的JavaScript对象(json) -
将你的POST数据作为“string”传递(也许使用jQuery:
$.post('foo.php',{data:st},function(data){... });
- 解码你的数据在服务器端处理:
$data = json_decode($_POST['data']);
就是这样…你可以自由使用你的数据。
multidimensional array和单个数组是作为普通数组来处理的。 要访问它们只需执行正常的$foo[4]
。
关联数组(javsacript对象)被作为php对象(类)处理。 要访问它们只需要像类: $foo->bar
。
使用JQuery序列化函数
http://docs.jquery.com/Ajax/serialize
序列化通常用于准备将用户input数据发布到服务器。 序列化的数据是以几乎所有的服务器端编程语言和框架兼容的标准格式。
我应该是这样的:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer }, function(response, status, xhr) { alert("POST returned: \n" + response + "\n\n"); })
这对我工作:
$.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; }
使用将数组操作数附加到所需variables名称的PHP内置function。
如果我们将值添加到一个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';