2011-09-29 159 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