質問: 現在、最終的にはhtmlでonClickしたらphp関数のlog_bbs()を実行するという処理を行いたいと考えております。 そのため、onClickしたらajaxで非同期処理をおこないlog_form()を実行したいのですが、 そもそもonClickしたらjsの関数を実行してくれません。 phpのヒアドキュメント内に書いているのですが何が間違っているのでしょうか。 お力をお貸しください。 下記にコードを記載致します。 ``` echo << function logout() { alert('OK');//実行されず $.ajax({ type: "POST", url: "bbs.php", //PHPを呼び出す success: log_bbs(){//成功処理 $("#bbs_form").html('正常に処理されました'); }, error:log_bbs(){//失敗処理 $("#bbs_form").html('処理に失敗しました'); } }); } 省略・・・ EOM; function log_form(){ 省略・・・ } ```
回答: JavaScriptの構文が間違っています。`success: log_bbs(){ ... }`という記述は不正であり、`success: function(){ ... }`が適切でしょう。 よって、正しくはこうではないでしょうか? ``` function logout() { alert('OK');//実行されず $.ajax({ type: "POST", url: "bbs.php", //PHPを呼び出す success: function(){//成功処理 $("#bbs_form").html('正常に処理されました'); }, error:function(){//失敗処理 $("#bbs_form").html('処理に失敗しました'); } }); } ``` これを修正してもalert文が動作しない場合、HTMLの属性も誤っているのかもしれません。 `onClick`ではなく`onclick`と記述してください。 ※以降の文章は余談となります `jQuery.ajax`のその使い方は既に古くなっています。現在は、`done()`や`fail()`を使用した書き方の方が分かりやすいです。 jQuery モダンAjaxな書き方を目指して 〜Deferredを使ったAJAX〜 - Hack Your Design! #jQuery 1.8以上の書き方 また、Ajax送信により特定のPHPの関数を実行したいという説明から不安を感じます。 何故なら、Ajax送信は通常のページ読み込みと同様に、対応するPHPファイルのPHPスクリプト全体が実行されるものであるため、特定の関数だけを実行する場合はURLルーティングなどの記述をおこなう必要があるためです。 全体の実装を見ていないため、的はずれな指摘ならば申し訳ないのですが、 提示したPHPコードが`bbs.php`の一部であり、かつ、質問のecho文が条件分岐などで分岐されずに直接記述されている場合、正しくログアウト処理が動作しない可能性があります。