2011-05-03 66 views
1

我有這些複選框:如何發送HTML陣列trought AJAX

<input type="checkbox" name="style[]" value="1" checked="checked" /> 
<input type="checkbox" name="style[]" value="2" /> 
<input type="checkbox" name="style[]" value="3" checked="checked" /> 
<input type="checkbox" name="style[]" value="4" checked="checked" /> 
<input type="checkbox" name="style[]" value="5" /> 

與這個jQuery處理程序:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.linkStyle').click(function(e) { 
      // 
     });     
    }); 
</script> 

所以,當我點擊複選框,我想送數組樣式[]給服務器帶來了AJAX(帶有實際值)。

我該怎麼辦?

編輯

嘗試:

$.post("list/browse_ajax.php", {id:"browseUpdate", actualArtist:browseArtist, actualEvent:browseEvent, actualData:browseData, style:$('#browseTableStyle:checkbox').serialize()}, 
    function(data) { 
     $("#browseList").html(data); 
    } 
); 

但款式[]不發...

EDIT 2 - 與序列化問題

這是整個代碼:

<form id="browseForm"> 
    <div class="wideinfo"> 
     <div class="content"> 
      <div class="tableList1"> 
       Style 
      </div> 

      <div class="tableList2"> 
       <span><input type="checkbox" name="style[]" value="Style1" checked="checked" /> Style1</span> 
       <span><input type="checkbox" name="style[]" value="Style2" /> Style2</span> 
       <span><input type="checkbox" name="style[]" value="Style3" checked="checked" /> Style3</span> 
       <span><input type="checkbox" name="style[]" value="Style4" checked="checked" /> Style4</span> 
       <span><input type="checkbox" name="style[]" value="Style2" /> Style5</span> 
      </div> 
     </div> 
    </div> 
</form> 

但:

style:$('#browseForm').serialize() 

它發送這個(上的Fiddler選中)

style: style%5B%5D=Style1&style%5B%5D=Style3&style%5B%5D=Style4 

不:

style[]: Style1 
style[]: Style3 
style[]: Style4 

最後是一個真正的/ comprensive HTML陣列.. 。

回答

2

當你finnaly有你的字符串提交style%5B%5D=Style1&style%5B%5D=Style3&style%5B%5D=Style4你可以獲取全面的陣列那樣:

parse_str($_POST['style'], $data); 

的的$data變量包含:

array(
    "style" => array(
     0 => "Style1", 
     1 => "Style3", 
     2 => "Style4", 
    ) 
) 

它是否解決問題了嗎?

+0

是的,男人,也許......但爲什麼我應該這樣做,如果我能以正確的形式發送數據? :)這就是我的意思,用Fiddler分析:http://img854.imageshack.us/f/examplek.jpg/(用標準提交/發送與該功能發送) – kwichz 2011-05-03 15:18:51

+0

胡,我現在看得更清楚。這就是爲什麼你應該把所有東西都放在形式上,並且把所有的東西都整合起來。這樣你就不會有這個問題。另一種方法是有一個非常沉重的JS手動提取所有的數據。 – 2011-05-03 15:22:27

+0

我發現如何解決它:)只是我創建一個字符串爲style ='style [] = Acid&style [] = Ambient&style [] = Big + Beat';我發送它:) – kwichz 2011-05-03 20:16:24

4

怎麼樣:

$.post('my-url', $(':checkbox').serialize(), function(data, textStatus, jqXHR){ 
    // my callback body 
}); 

編輯:其實序列化功能僅適用於形式(因此序列化表單域)。所以你必須把你的領域包裝在一個表格中。見下圖。

+0

uhm ...其實我也不知道這個功能。 $ .ajax不是更好嗎? – kwichz 2011-05-03 12:22:26

+2

$ .load,$ .post,$ .get ...只是預先配置的$ .ajax函數的快捷方式。 – 2011-05-03 12:27:46

+1

$ .post是一個更具體的版本$ .ajax – 2011-05-03 12:28:52

1

首先,你的回調似乎並不一致:

function(data) { 
    $("#browseList").html(msg); 
} 

你可能想說:

function(data) { 
    $("#browseList").html(data); 
} 

也有你檢查螢火蟲或您的探險家的JavaScript debuger,看是否有任何錯誤。你也可以向我們展示實際提供的數據。 Finnaly呼叫的結果是什麼:

$(':checkbox').serialize() 
+0

是啊,data-msg是一個錯誤的副本,粘貼在這裏:) JS上沒有錯誤調試器。試圖用Fiddler檢查值:樣式發送,但值是空的...所以它沒有得到正確的複選框。附:他們成id與browseTableStyle的div,所以我也嘗試使用'#browseTableStyle:複選框',但沒有。看起來像它到達服務器的變量,而不是數組?!?!?!如何查看$(':checkbox')的結果。serialize()? – kwichz 2011-05-03 13:23:03

+0

喲可以通過在您的Web開發控制檯上輸入$(':checkbox')。serialize()來查看結果。此外,我檢查和序列化是用於表單元素。因此,如果你將輸入封裝在一個表單中,你可以這樣做:$('form')。serialize()。對不起,這個錯誤。 – 2011-05-03 13:51:43

+0

閱讀序列化文檔,它會創建一串值;我需要一組值;所以我需要傳遞類似樣式[]的東西,而不是樣式和值序列化... – kwichz 2011-05-03 13:54:32

1

是的,這應該工作。

style:$('#browseForm').serialize() 

最後我強烈建議你inclue所有發佈數據的形式,這樣就可以簡單地做:

$.post('my-url', $('form').serialize(), function(data){ 
    $("#browseList").html(data); 
}); 

它是清潔,簡單,易於維護。之後,你的PHP腳本應該處理剩下的事情。

+0

沒有人,就是我說的:我得到的字符串樣式%5B%5D = Style1&style%5B%5D = Style3&style%5B%5D = Style4。 ..這不是一個HTML數組,是一個字符串!如果我通常發送表單,我會發送3個變量,稱爲style [](each),其值爲:這是一個數組:)。 – kwichz 2011-05-03 14:19:21

+0

是的,但樣式%5B%5D與style []類似。所以序列化的字符串是可以的。所以你需要做的是在你的php中將它串行化,例如使用parse_str:http://php.net/manual/fr/function.parse-str.php。 – 2011-05-03 14:42:11

+0

嚴禁..但我怎麼能用jQuery發送不同的參數(比如很多樣式[])?這是我需要知道:) – kwichz 2011-05-03 14:54:09