$.ajax
jQuery Forms Plugin を使用してフォームを送信するための使用をリファクタリングしています。APIは、に渡され$.ajax
た任意のオプションを に渡すことができると述べています$.ajaxSubmit
。beforeSubmit
のオプション オブジェクトを変更して、プロパティを追加したいと考えていdata
ます。options.beforeSubmit
inの値を警告するprocessSubmit
ことは、これがハンドラーによって初期化されたオプション オブジェクトであり、データが設定されていることを示唆していますが、オプション オブジェクトはプロパティなしで既に初期化されているdata
ため、サーバーに送信される投稿には含まれません。beforeSubmit
またはその他の方法でオプション オブジェクトを変更することはできますか?
ドキュメントの準備ができたら、ハンドラーを次のようにバインドしsubmit()
ます。
$("#myform").submit(function() {
var options = { dataType: 'json',
beforeSubmit: processSubmit,
success: endSubmit };
$(this).ajaxSubmit(options);
return false;
});
このprocessSubmit(arr, $form, options)
関数は、JSON としてサーバーに送信されるデータをパッケージ化します。
function processSubmit(arr, $form, options) {
var followers =[];
$($("#follower-multi-select").children().filter("li")).each(function() {
if ($(this).hasClass("selected")) {
var fwr = $(this).attr("id");
followers.push(fwr);
}
});
var postData = { followers : followers };
alert('beforeSubmit is: ' + options.beforeSubmit);
options.data = 'json='+$.toJSON(postData);
alert('data set: ' + options.data);
}
フォーム HTML:
<form id="myform" action="/myaction" method="post">
<fieldset>
<legend>Choose your competitors</legend>
<ul id="follower-multi-select" class="follower-multi-select">
{% for f in follower_thumbs %}
<li id="{{ f.hashedkey }}"><img src='{{ f.thumb }}' alt="{{ f.name }}" /><span class="name-multi-select">{{ f.name }}</span></li>
{% endfor %}
</ul>
</fieldset>
<input id="send" type="submit" class="large" value="send" />
</form>