2012-02-15 18 views
0

私は$.post()で自分のメソッドに配列を送信しようとしていますが、これについてどうやってやっていくのか分かりません。jqueryポストで送信する配列

私のフォームの外にあるチェックボックスの値を取得し、それらを私のメソッドに渡しています。 list.serializeArrayは、私はちょうど私がnull値を取得し、配列に送る機能

ない

私は.serializeArray() & .serialize()を使用しますが、エラーを取得しようとしました

こと。

HTML

<form....><input type="submit" value="submit" id="click_post" /></form> 

<div id="container"> 
     <input type="checkbox" value="2,3" name="checkbox" /> 
     <input type="checkbox" value="4,5" name="checkbox" /> 
     <input type="checkbox" value="6,7" name="checkbox" /> 
</div> 

jQueryの

$('#click_post').click(function() { 
       var list = new Array(); 
       $('#container input[type="checkbox"]').each(function() { 
        list.push($(this).val()); 
       }); 

       var $form = $(this).closest('form'); 
       $.post($form.attr('action'), { value: list }, function (data) { 
        alert('test'); 
       }); 
      }); 

METHOD

public ActionResult PassArray(string[] value){//doing some logic here} 
+0

あなたのリストをjQueryオブジェクトでラップしようとしましたか? $(list).serialize()? –

+0

ラップは私のために空のオブジェクトを作成するだけです –

+0

投稿データとして送信されると思われるものを書くことができますか? – sinsedrix

答えて

0

$( '#のclick_post')をクリックします(関数(){ 変数$フォーム= $(この).closest( 'フォーム' ); $ .post($ form.attr( 'action')、$ form。シリアル化()、関数(データ){ アラート( 'テスト'); }); });また

checkboxにあなたの行動パラメータの名前を変更する(つまり、フォームでチェックボックスの名前として使用したものだから):

public ActionResult PassArray(string[] checkbox) { 
    ...  
} 


UPDATE:

またはチェックボックスの値のみを送信し、その他のフォーム入力要素は送信しない場合は、traditionalモード:

$('#click_post').click(function() { 
    var list = new Array(); 
    $('#container input[type="checkbox"]').each(function() { 
     list.push($(this).val()); 
    }); 

    var $form = $(this).closest('form'); 
    $.ajax({ 
     url: $form.attr('action'), 
     type: 'POST', 
     traditional: true, 
     data: { value: list }, 
     success: function(result) { 
      alert('test'); 
     } 
    }); 
}); 

か:その後、

$('#click_post').click(function() { 
    var list = new Array(); 
    $('#container input[type="checkbox"]').each(function() { 
     list.push($(this).val()); 
    }); 

    var $form = $(this).closest('form'); 
    $.post($form.attr('action'), $.param({ value: list }, true), function(result) { 
     alert('test'); 
    }); 
}); 

と:

public ActionResult PassArray(string[] value) { 
    ...  
} 
+0

しかし、チェックボックスは私のフォームの外にあります。それは –

+0

@ Dejan.Sです。私の更新された答えを見てください。 –

+0

Darin、ありがとうございます。なぜ$ .ajaxでは動作し、$ .postでは動作しないのですか? –

0

serializeまたはserializeArrayはjQueryオブジェクトではないシンプルな編曲に適用されなければなりませんAY、例えば:$.postに渡さ

var serialized_data = $form.serialize(); 

データは次のようになります。

データ要求でサーバーに送信されたマップまたは文字列。

したがって、PassArrayメソッドの引数を変更する必要があります。


また、フォームの外にデータをシリアル化することができます。

var serialized_data = $('#container input:checkbox').serialize(); 
+0

これは私を助けません、私の値はフォームの外にあります –

+0

通常、あなたが投稿する値は投稿するフォームにあるべきです – sinsedrix

+0

-1、よくこの状況はありませんし、フォームの外からより多くの情報を取得したい場合もあります –

0
var list = new Array(); // This simply looks ugly 
var list = []; //This is the best way to so it in js - both are the same though 
//everything else seems fine.. now 
var data = {value: JSON.stringify(list)}; // -> '[1,2,3]' and so on 

あなたのコードの残りの部分は結構です。私は疑問に思っていますが、チェックボックスをループして自分のデータを構築するときに、なぜフォームを使用しますか?これらのチェックボックスはフォーム内にありますか?それでも、あなたのためのポストリンクを保持しているだけですか?

関連する問題