2012-07-13 70 views
1

我对如何关联索引和javascript感到困惑。Ajax关联数组

在我的javascript,我这样做:

$("input[type=button]").click(function() { 
    var checked = {}; 
    $('input[type=checkbox]').each(function() { 
     if ($(this).is(':checked')) { 
      checked[$(this).attr('name')] = $(this).val(); 
     } 
    }); 

    var value = []; 
    value.push($(this).siblings("input[type=text]").val()); 

    $.ajax({ url: "scripts/php/generatehtml.php", 
     data: {action: value}, 
     type: 'post', 
     dataType: "json", 
     success: ...<cut for brevity>}); 

所以在我的PHP代码,我这样做:

if (isset($_POST['action']) && !empty($_POST['action'])) { 
    var_dump($_POST['action']); 
} 

而得到这样的:

array(1) { 
[0]=> 
    string(5) "12277" 
} 

,你可以看,这是一个索引数组,我想要一个关联数组。 但whenver我做这样的事情:

value['id'] = $(this).siblings("input[type=text]").val() 

没有被发送。

我对Ajax不太好,这里的任何帮助都会非常棒!

注意:我确实看过其他Ajax阵列的答案,但我不认为他们回答我的问题。

+0

JSON(JavaScript中,通常情况下)不使用 “关联数组”,它使用对象来代替。将变量初始化为对象的简写语法是用花括号代替“方形”括号。 – 2012-07-13 06:46:05

回答

3

如果您想要关联数组,请将您的变量初始化为一个。这样,您可以添加对应于特定属性的值,如下所示:

var value = {}; 
value['id']=$(this).siblings("input[type=text]").val(); 
+0

啊哈,哦。 是否有原因{}表示关联? – Adola 2012-07-13 06:45:17

+0

(注意用方括号代替大括号) – nbrooks 2012-07-13 06:45:21

+0

@adola这只是没有属性的文字javascript对象的语法。请记住,使用JS的宽松输入,这两种类型都归结为只是对象。但是使用'[]'声明一个从'Array'继承的对象,在这种情况下这不是你想要的。 – nbrooks 2012-07-13 06:47:41

2

您不能在JS中使用关联索引数组。

您可以使用一个JS对象,而不是:

var value = {}; 

然后,你可以这样做:

value['id'] = $(this).siblings("input[type=text]").val() 

或者

value.id = $(this).siblings("input[type=text]").val() 
0

只是评论:

if ($(this).is(':checked')) { 
     checked[$(this).attr('name')] = $(this).val(); 
    } 

可以被代替:

if (this.checked) { 
     checked[this.name] = this.value; 
    }