2011-03-25 57 views
0

我很难过。我试图通过迭代所有输入并收集它们的字符串来发送AJAX调用。如何在javascript中为一个简单的AJAX调用编写迭代器?

所以我的PARAMS会希望是这样的:

"action"=>"create", 
"type"=>"zip", 
"value"=> ["12", "13", "14", "14", "15", "16"], 
"controller"=>"admin/distributions", 
"email_id"=>"3"} 

这是我有什么,但它给我一个[Object object]作为值:

$(".all_of_morris").live("click", function(){ 
    id = window.location.href.split("/")[5] 
    $.ajax({ 
    type: "POST", 
    url: "/admin/emails/" + id + "/distributions", 
    dataType: "script", 
    data: { $.each($(".morris input"), function(){ 
     value: $(this).val(); 
    }), 
     type: "zip" } 
    }); 
}); 

回答

2

如果您需要value属性的数组,你可以使用jquery map功能:

$(".all_of_morris").live("click", function(){ 
    var data = {}; 
    data.value = $(".morris input").map(function(){ 
     return $(this).val(); 
    }).get(); 
    data.type = 'zip'; 
    //..etc 
    id = window.location.href.split("/")[5] 
    $.ajax({ 
     type: "POST", 
     url: "/admin/emails/" + id + "/distributions", 
     dataType: "script", 
     data: data 
    }); 
}); 
+0

奇怪,这只是返回的最后一个值 – Trip 2011-03-25 19:38:13

+1

@Trip - 在[独立的jsfiddle](HTTP ://jsfiddle.net/m6mrh/)它没有。 – 2011-03-25 19:41:02

+0

@Trip:这可能与['.get()'](http://api.jquery.com/get/)有关。 – 2011-03-25 19:42:41

0

有关使用serialize()如何?

$('.morris input').serialize(); 

而你不想要在json对象中的.each。如果需要预处理,首先使用您认为必要的任何方法在变量中构建有效载荷,然后将该变量传递给.ajax调用。

例如

var value = /*get value array */; ... 
var dataToPass = { 
    'action' : 'create', 
    'value': value, 
    'type' : 'zip', 
    ... 
}; 
$.ajax({ 
    ... 
    data: dataToPass, 
    ... 
}); 
0

因为jQuery的each只是执行它的内容,它返回一个对象,而不是返回。数据键也接受字符串作为值,因此您可以遍历内容,生成类似"action=create&type=zip&..."的内容,然后将该数组作为数据键的值。

0
data: { value: $('.morris input').map(function() { 
        return $(this).val(); 
       }).get(), 
     type: 'zip' 
     },