如何通过URL参数将Javascript / jQuery数组发送到PHP?

时间:2011-09-29 14:53:01

标签: php javascript jquery arrays associative-array

这是我的脚本,这很好用...... send_array_to_other_page.html

$(function(){
    //DECLARE ARRAY
    var arr = new Array();
    var i = 0;
    $('#form').submit(function(e){
        e.preventDefault();
        var value = $('#box').val();
        var index = arr.length;
        var list = ''; 
        //ADD VALUE TO ARRAY
        arr[index] = value; 
        //OUTPUT VALUES IN ARRAY
        for (var index in arr){
            list+=index+': '+arr[index]+'<br/>';
            $('#arrLength').html(arr.length);
        }
        //DISPLAY ARRAY
        $('#display').html(list);
        $('#form').get(0).reset(); //RESET FORM
    });
    $('#submit').click(function(){
        window.location = 'send_array_to_other_page_2.php?list='+arr;
    });
});

这不是。它输出Array content lost。我还想指出此页面的网址是send_array_to_other_page_2.php。它遗漏了?list=

<?php
    $arr = $_GET['list'];
    echo 'The contents of the array are still... <br/>';
    if(isset($arr)){
        print_r($arr);
    } else {
        echo 'Array content lost';
    }
?>

3 个答案:

答案 0 :(得分:1)

不要通过网址发送“长”数据。大多数浏览器都有一个长度限制,很容易超过它并最终导致数据损坏。对于“大”数据,请使用POST,但不限于此。

要发送数组本身,只需执行一个AJAX请求,然后让jquery将数组编码为JSON。然后,您使用json_decode()在PHP中处理它,最终将使用本机PHP数组。

答案 1 :(得分:1)

$(function(){
    //DECLARE ARRAY
    arr = new Array();
    var i = 0;
    $('#form').submit(function(e){
        e.preventDefault();
        var value = $('#box').val();
        var index = arr.length;
        var list = ''; 
        //ADD VALUE TO ARRAY
        arr[index] = value; 
        //OUTPUT VALUES IN ARRAY
        for (var index in arr){
            list+=index+': '+arr[index]+'<br/>';
            $('#arrLength').html(arr.length);
        }
        //DISPLAY ARRAY
        $('#display').html(list);
        $('#form').get(0).reset(); //RESET FORM
    });
    $('#submit').click(function(){
        window.location = 'send_array_to_other_page_2.php?list='+arr;
    });
});

尝试不使用var arr使其成为全局的,我不相信子函数正在解析它。

答案 2 :(得分:0)

修改:根据您的评论更新了JavaScript on jsfiddle。在“提交”时,使用.data()方法将数组保存在“#form”元素中。在“点击”“#submit”按钮时,将检索该数据并建立网址。


click事件在提交事件之前触发(至少在我的Firefox 7中),因此当连接到URL字符串时,您的数组为空。

我把some JavaScript on jsfiddle放在一起可能有所帮助。您实际上不需要绑定到提交按钮的click事件,只需在提交处理函数中执行“重定向”。无论如何,你正在构建字符串list。因此,首先触发的是点击或表单提交事件,不会产生混淆。

至于数组的序列化,我使用了jQuery's .each() function,但手工完成没有任何错误(如果正确完成)。

我还可以想象表单实际上已发布,这就是为什么你没有看到URL的“?list”搜索部分。

如果您不需要完整的重定向,为什么不使用jQuery.get()发送数据?