2011-09-29 136 views
0

这里是我的脚本,这工作得很好... send_array_to_other_page.html如何通过URL参数发送Javascript/jQuery数组到PHP?

$(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'; 
    } 
?> 
+0

如果你做$ arr = $ _SERVER [“QUERY_STRING”]会发生什么 – jdborg

+0

我试过$ arr = $ _SERVER ['QUERY_STRING'],它没有显示'Array content lost',但它也没有输出内容该数组,只有空白。 – JohnSmith

+0

如果你做一个var_dump($ _ SERVER [“QUERY_STRING”]); – jdborg

回答

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使其成为全局的,我不相信子函数解析它。

+0

它现在可以工作,内容正在PHP中显示,但作为一个字符串而不是数组。我试过这个foreach($ arr as $ index => $ value){echo'Index'。$ index。'有价值'。$ value; }并且我得到一个错误,说明each()的参数是无效的 – JohnSmith

+0

因为$ arr只会是一个字符串。如果你在做.php?list ='foobar',而你要求$ _GET ['list'],那么你已经说明了索引是什么。 – jdborg

+0

你能把这个标记为答案吗? – jdborg

1

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

要发送数组本身,只需执行AJAX请求并让jquery将数组编码为JSON。然后,您使用PHP以json_decode()的方式处理它,最终得到一个本地PHP数组。

+0

嗨。我不太熟悉JSON。唯一能做的JSON是从PHP到JS,而不是其他方式。如何将jQuery数组编码为JSON? – JohnSmith

+0

http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery。 JSON基本归结为用于定义变量值的原始JavaScript代码。如果你有'var x = [1,2,3]',那么'[1,2,3]'部分被编码成json格式,实际上看起来几乎相同。 –

0

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


单击事件会触发提交事件(至少在我的Firefox 7)之前,因此,当连结到URL字符串您的数组是空的。

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

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

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

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

+0

对不起,如果它造成任何混淆,但$('#提交')实际上不是一个提交按钮类型。它只有一个ID为'submit'的按钮。我实际上需要重定向到PHP页面。 – JohnSmith

+0

更新了我的答案。 – Wolfram