2011-05-03 29 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