2011-12-05 8 views
0

私はちょうどajaxで始まっています...投稿リクエストを通じてajaxでフォームを送信しようとしています。何らかの理由で、私が書いたコードはまったく別の時間に動作します。私が最初にフォームを提出すると、それはajaxによって処理されます。私が再び提出すると、javascriptは呼び出されず、フォームは通常の投稿要求と共に提出されます。 3回目に提出すると、Ajaxが再び動作します。等々。毎回AJAXを動作させるためにこれを修正する方法はありますか?Ajaxリクエストは他のすべての時間だけ動作します

function contact_submit() { 

alert('starting'); 

var data = { 
    name: $('#id_name').val(), 
    email: $('#id_email').val(), 
    title: $('#id_title').val(), 
    message: $('#id_message').val(), 
    csrfmiddlewaretoken: $('input[name="csrfmiddlewaretoken"]').val() 
}; 

$('#contact_form').load("/contact/?ajax", data, function(response, status, xhr) { 
    if (status == "error") { 
     var msg = "Sorry but there was an error: "; 
     $("#contact_form").html(msg + xhr.status + " " + xhr.statusText); 
     } 
}); 

alert('load was performed'); 

return false; 
} 

$(document).ready(function() { 
//*$(document).submit(contact_submit); 
$(document).on("submit","form",contact_submit); 
}); 
+0

解決方法を使用して解決しました。以前は、私はajaxリクエストで毎回submitボタンを再生成していましたが、イベントハンドラが再生成されたsubmit要素にアタッチされていなかったと思います。私はAjaxリクエストの対象外に提出を移動し、毎回作業を開始しました。 – vasek1

+0

あなた自身の答えをこのスレッドに入れ、正しいものとしてマークする必要があります。将来の読者に役立ちます – rkw

+0

ええ、私は低所得者がいるので8時間待たなければなりません。私ができる時にやります。 – vasek1

答えて

1

解決方法を使用して解決しました。以前は、私はajaxリクエストで毎回submitボタンを再生成していましたが、イベントハンドラが再生成されたsubmit要素にアタッチされていなかったと思います。私はAjaxリクエストの対象外に提出を移動し、毎回作業を開始しました。

1

あなたはdocumentレベルでそれを取り付けた場合は、return falseを使用してイベントをキャンセルすることはできません。 documentレベルに伝播するまでに、フォームはすでに提出中です。あなたは、フォームに具体的に(あなたがコメントアウトしたように)イベントを添付して、load()コールの成功イベントで再びイベントを再接続する必要があります。

+0

私はそれを試したが、まだ同じ交互の動作をしている(コードサンプルから削除したものの) – vasek1

+0

@ vasek1おそらくコードに例外が発生したためにイベントをアタッチできなかった可能性があります。 –