2010-09-12 51 views
0

试图从发送阵列:发送阵列使用jQuery阿贾克斯

<select name='galaddvenn[]' class='sel_add vl hidden' multiple='multiple'> 
<option value='53'>name1</option> 
<option value='352'>name2</option> 
<option value='632'>name3</option> 
<option value='543'>name4</option>..etc 
</select> 

... /从jQuery的搭配:

var ar = $("select#galaddvenn").serialize(); 

     j.ajax({ 
     data: ({ar : ar}), //tried with 'ar':ar 
     dataType: "html", 
     type:"post", 
     url: "/ajax_gal_addvenn.php", 
     cache: false, 

....等 到PHP:

if(isset($_POST['ar'])){ 
$ar = mysql_real_escape_string($_POST['ar']); 
var_dump($ar); 

给我:布尔(假):(

我在这里做错了什么?

回答

3

.serialize()本身得到一个完整的POST字符串,所以它会采用以下格式:

galaddvenn=53&galaddvenn=352&galaddvenn=632 

所以你的电话应该是这样的:

j.ajax({ 
    data: ar, 
    dataType: "html", 
    type:"post", 
    url: "/ajax_gal_addvenn.php", 
    cache: false 
}); 

然后在PHP端,您正在寻找$_POST['galaddvenn']

You can test the output here

+0

非常感谢! :d – teecee 2010-09-15 05:55:08

0

mysql_real_escape_string()需要一个字符串。你不能在你的阵列上使用它。查看docs了解更多信息。您应该使用一个循环做到这一点:

foreach ($_POST['ar'] as $key => $element) { 
    $_POST['ar'][$key] = mysql_real_escape_string($element); 
} 

如果你得到这样的错误,你应该对它们进行处理之前测试您的输入数据(应用mysql_real_escape_string()之前例如使用var_dump())。

+0

@Thundercat - 它本质上是空的,或者说是一个无用的字符串,请参阅我的回答:) – 2010-09-12 20:54:46

+0

@Thundercat:原因是您应该像Nick Craver建议的那样查找'$ _POST ['galaddvenn']''。使用'$ _POST'上的var_dump()来查看原因;) – jwueller 2010-09-12 20:55:15

+0

非常感谢!现在工作正常:D – teecee 2010-09-15 05:55:43