你究竟如何使用json_decode将javascript数组传递给php?

时间:2010-12-28 04:31:52

标签: php javascript

这就是我将我的php数组转换为javascript的方式

echo 'var daysofweek = '.json_encode($daysofweek).';';

现在我知道json_decode可以做相反的事情,但问题是我不知道这样做的语法。

我试过了:

<script>
var array_days = new Array();

array_days[] = "psdfo";
array_days[] = "bsdf";

<?php
$array_days = json_decode(?>array_days<?php);?>

</script>

是的,我一无所知。

我忘了提到我想通过post发送一个数组,包含有关javascript动态创建的所有表单值的所有信息。否则,我不知道要查找哪个名称=“”,因为它将由用户决定。除非别人有替代解决方案......

4 个答案:

答案 0 :(得分:2)

PHP是一个预处理器,无法满足您的要求。您需要PHP引擎才能处理页面上的javascript。 json_decode用于解码PHP中的json字符串。

要做到这一点,你必须使用像Ajax之类的东西将javascript数组传递给PHP脚本,这样你的PHP脚本无论如何都可以处理它,然后将结果传回你的Javascript代码。

答案 1 :(得分:0)

是的,正如Wajiw所说,PHP是预处理器。但我认为有可能使用ajaxed请求。 将Javascript数组作为参数请求发送到另一个页面并使用php处理它,并再次显示结果。

注意:从未尝试过这个:) 感谢

答案 2 :(得分:0)

<script>
var array_days = new Array();

array_days[] = "psdfo";
array_days[] = "bsdf";

<?php
$array_days = json_decode(?>array_days<?php);?>

</script>

我对此部分一无所知......这是javascript吗?如果是这样,您需要使用JSON解析器,如JSON2.js https://github.com/douglascrockford/JSON-js

此文件创建一个Javascript JSON对象,允许您将JSON字符串解析为Javascript对象。 (你总是可以使用eval()但它不会阻止可能的恶意代码...)或者反过来......从Javascript对象转换为JSON字符串。

转换为JSON字符串后,您只需将数据通过AJAX发送到PHP文件,如:

var data = {
   key: value,
   key2: value2 
},
JSON = JSON.stringify(data);

$.ajax({
    url: 'php_file.php',
    type: 'POST',
    data: JSON,
    success: function(data){
        alert(data)
    }
});

(我正在使用jQuery来保存一些行......)

然后在php_file.php上你会有这样的东西:

<?php 
    $json = json_decode($_POST['data']);

    foreach($json as $value){
       //Do something with it!
    }
?>

答案 3 :(得分:0)

首先:

array_days[] = "psdfo";
array_days[] = "bsdf";

这些行是有效的PHP,但不是有效的JavaScript。正确的等价物是:

array_days.push("psdfo");
array_days.push("bsdf");

将生成的字符串数组(这是我假设的)传递给PHP。要在纯JS中将其作为表单数据发送,我们可以在提交表单时创建隐藏的输入元素(try it):

<form id="myform" method="POST" action="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi">
    <input type="submit" value="Submit">
</form>
<script>
    document.getElementById('myform').onsubmit = function() {
        for(var i = 0; i < array_days.length; ++i) {
            var inputElement = document.createElement('input');
            inputElement.type = 'hidden';
            inputElement.name = 'array_days[]';
            inputElement.value = array_days[i];
            this.appendChild(inputElement);
        }
    };
</script>

PHP会将名称为array_days[]的每个输入解释为$_POST['array_days']的数组元素。例如,您可以在PHP中访问$_POST['array_days'][0]

对于AJAX,当您将数组作为数据参数传递给$.ajax时,jQuery 1.4及更高版本将自动实现此效果。

为什么不json_decode()答案是旧版本的网络浏览器不支持等同于PHP JSON.stringify()的JavaScript函数json_encode(),尽管有一个library to add support。人们可能会认为这是一个更复杂的案例,但对于这样一个简单的案例,它不应该是必要的。