2011-03-25 58 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' 
     },