2009-09-01 12 views
0

なぜ次の人がフォームを受け取らないのですか?すべてのエラーをスローせずに通常のPHPの投稿を行うだけです...jQuery Ajax提出の問題

私はこれもblockUiを使用しているのでブロック/ブロックを解除します。

$(document).ready(function(){ 
    $("input.update").click(function(){ 
     var str = $(this).parent().serialize(); 
     $(this).parent().parent().block({ message: "<span class=\"loading\"><img src=\"<?php echo $siteUrl ?>/admin/template/images/loading.gif\" alt=\"loading...\" /><p>Updating...</p></span>" }); 
     $.ajax({ 
      type: "POST", 
      url: "forms/update.php", 
      data: str, 
      success: function(){ 
       $("div.edit_box").unblock(); 
       $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 
      } 
     }); 
     return false; 
    }); 
}); 

これは、jQueryのAjax機能を使用する私の最初の試みですので、私に同行してください。それはあなただけが目に少し簡単です.post方法を、使用することができますポストの「成功」のコールバックを使用していると思われるので

答えて

1

でなければなりません。また、ブロックコールをajaxStartajaxStopの中に入れることもできます。私にとっては、それはほんとうです。

$(this).parent().parent().blockは私には間違っているように見えますが、ブロック解除に使用されているのと同じ要素を参照するように変更しました。また、実際にが「」であることを確認するために、PHPスクリプトの出力をチェックしています(PHPからのXMLをエコーし​​てコンソールログに表示されます)。

$(function() { 
    // Apply click handlers to anchors 
    $("input.update").click(function(e){ 
     // Stop normal link click 
     e.preventDefault(); 

     var str = $(this).parent().serialize(); 

     // Send request 
     var action = "forms/update.php"; 
     $.post(action, {data:str}, function(xml) { 
      console.log(xml); 
      $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 

     }) 
    }); 

    // Adds a wait indicator to any Ajax requests 
    $(document.body).ajaxStart(function() { 
     $("div.edit_box").block({ message: "<span class=\"loading\"><img src=\"<?php echo $siteUrl ?>/admin/template/images/loading.gif\" alt=\"loading...\" /><p>Updating...</p></span>" }); 

    }).ajaxStop(function() { 
     $("div.edit_box").unblock(); 
     $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 
    }); 
}); 
+0

これは仕事に感謝しました!元のスクリプトがうまくいかなかった理由をご存じですか?同じページに同じクラスのボックスが複数あるので、私は二重の親を使いました。そして、彼らは一度に彼らのコンテンツを更新したくありませんでした。 – phil

+0

私は正確にはわからないが、this.parent.parentのものはちょっと変わったと思ったが、間違っているとは思わない。また、私は実際に.ajax呼び出しを使用したことがないので、そこに問題があるかもしれません。 うれしかった!私はちょうどajax/phpを学んでいるだけなので、ちょっと新しいです。 Firebugを使用していると言ったので、console.log($(this))。parent())を使用して、本当にあなたの考えを返すかどうかを確認できます。 JavaScriptの理解は少し不安です。 – aland

+0

また、FirePHPを使用していますか? Firebugの拡張で、PHPからコンソールに出力できます!かなりファンキーな、例えば - $ firephp = FirePHP :: getInstance(true); $ firephp-> log($ _ SESSION、 "私のPHPセッションでは何が起こっていますか?" PHPスクリプトをプロダクションサーバーにアップロードするときに、これらの呼び出しをすべて削除するようにしてください。 :) – aland

2
("input.update").click(function(){ 

$("input.update").click(function(){ 
+0

申し訳ありませんが、そこには$が実際にスクリプトには存在しますが、何らかの理由で例にはありません。 – phil

+0

javascriptをデバッグするツールを使用していますか? – riotera

+0

また、フォームをajax経由で送信したい場合は、submitイベントまたはajaxフォームプラグインを使用することができます。http://malsup.com/jquery/form/ – riotera