2011-09-18 8 views
0

I持って、次のHTMLコード:(それはdiv要素の中に、AJAXを経由してロードされる)jQueryのは、ページの更新と、フォームポストを動作していないアヤックス

(関係ない部分を切り取り)だから、

<form id='addContactForm' method='post' action='/contact/create/'> 
    <div> 
     <input type="image" name="submit" id="addContactSubmit" src="/images/add-small.png" style="width: auto; vertical-align: bottom;"> 
    </div> 
</form> 

<script> 
    $('#addContactSubmit').click(function() { 
     alert('got here'); 
     $.ajax({ 
      type: 'POST', 
      url: '/contact/create/', 
      data: $("#addContactForm").serialize(), 
      success: function (data, status, xhttp) { 
       if (data) { 
        alert('Got Data'); 
       } else { 
        alert('No Data'); 
       } 
      }, 
      dataType: html 
     }); 
     return false; 
    }); 
</script> 

<image>をクリックすると、実際にフォームがポストされ、ページが更新されます。私は問題がjqueryがロードされていなかったことを述べた別の記事を読んで、一度その問題を修正してロードしました。しかし、この場合、jqueryがロードされていることを通知する警告が表示されますが、$.ajax部分が実行されていない(または問題がある)ようです。 $.ajax部分を削除すると、アラートが表示され、ページは送信されず再読み込みされません。

元々、このフォームhtmlはメインページのajax呼び出しで読み込まれていると述べていますが、失敗したajax投稿とは何か関係があるのでしょうか?注意警告(「データが見つかりました」)または(「データがありません」)、警告が「ここにあります」

すべてのinsiteは素晴らしいでしょう。ありがとうございました

別のメモ、私は火かき棒でエラーを取得しています。

答えて

3

フォームを自動的にポストバックし、ajaxスクリプトを実行するサブミット入力です。

私がやったすべてが、その後e.preventDefaultを(呼び出して、あなたのjQueryの関数にクリックイベントを渡すです

<script> 
    $('#addContactSubmit').click(function (e) { 
     e.preventDefault(); 
     alert('got here'); 
     $.ajax({ 
      type: 'POST', 
      url: '/contact/create/', 
      data: $("#addContactForm").serialize(), 
      success: function (data, status, xhttp) { 
       if (data) { 
        alert('Got Data'); 
       } else { 
        alert('No Data'); 
       } 
      }, 
      dataType: html 
     }); 
     return false; 
    }); 
</script> 

...これを試してみてください)が、この場合のデフォルトのDOMのクリックイベントの実行を停止します送信ボタンはポストバックです。

これは理にかなっていると思っています。

+0

これはまさに私が必要としていたものです!完璧。上記のコードでは少し問題が発生しています。 Firebugは次のように表示しています。 "htmlが定義されていません" [Break On This Error](39の範囲外18)。今すぐ 'dataType:html'行を削除しても正常に動作するようですが、それが最善の解決策ですか? –

+1

引用符で試してみましたか?だから "html"。私は引用符なしでかなり確信しています、javascriptは、このケースでは存在しないため、あなたがFirebugのエラーを取得する理由は変数ですと思うでしょう。リクエストを作成するときにそのパラメータをそのまま残しておけば安全ですが、jQueryは内部的な作業を行いますが、通常、送信するデータフォーマットを知るのに十分なインテリジェントです。ここをクリックしてください:http://api.jquery.com/jQuery.ajax/データ型は、ページの下半分です。 – timothyclifford

+0

これは素晴らしいことでした。ありがとう! –

関連する問題