0

2日経ちましたが、まだこの問題を解決できません。基本的に、jquery ajaxを介してphp関数を呼び出そうとしていますが、何も機能していません。何が問題なのかわかりません...ここに私のコードがあります

アヤックス

$(document).ready(function() {
    $("#idCheck1").click(function(){
        $.ajax({
            url:'../../../../Controller/PostsController.php', 
            data: {action: 'update_checkbox'},
            success:function(result){
//                $("#dsa").html(result);
            } 
        });
    });
});

景色

<?php echo $this->Form->create("Posts", array("action" => "update_checkbox", "id" => "checkingBox")) ?>
                    <td>
                        <?php
                        echo $this->Form->input('Post.' . $i . '.id', array("type" => "hidden", "label" => false, "value" => $sum['posts']['id']))
                        ?>
                        <?php
                        echo $this->Form->input('Post.' . $i . '.done', array("type" => "checkbox", "label" => false, "value" => "1", "id" => "idCheck1"))
                        ?>
                    </td>
                </tr>
                <?php
                $i++;
            }
            ?>

        </table>
        <?php echo $this->Form->end(); ?>

コントローラー

 public function update_checkbox() {
        //    debug($this->data);
        $var = $this->Post->saveCheckBox($this->data);
        $this->set("result", $var);
    }

モデル

public function saveCheckBox($checkbox) {
        debug($checkbox);
        $this->saveAll($checkbox['Post']);
    }
4

1 に答える 1

2

URL

url:'../../../../Controller/PostsController.php'

間違っているように見えます。これはブラウザを通過する AJAX リクエストであるため、ブラウザの URL がそのように機能しないため、フォルダー階層を上に移動しようとする相対パスを使用することはできません。Web サーバーを通過するようにそのリクエストを作成する必要があります。つまり、URL は次のいずれかのようになります。

url:'http://localhost/Controller/PostsController.php'

また

url:'/Controller/PostsController.php'

最初のオプションは絶対 URL ですが、これによりコードの柔軟性が少し低下します (ドメインを localhost から別のものに変更するとします)。2 番目のオプションは相対 URL ですが、Web サーバーのドメイン ルートに対して相対的な URL です (例では、まだ localhost/Controller に解決されます...)。

どちらの場合も、投稿内容に基づいて、PHP ファイルはサイトのドキュメント ルートの Controller/ フォルダーに存在する必要があります。しかし、あなたのコードの構造は、何らかのフレームワーク (Zend、Symfony、CodeIgniter など) を使用していることを示唆していますか? その場合は、使用しているフレームワークに関する情報を投稿すると、答えが変わる可能性があるため、役に立ちます。

アップデート

CakePHP の場合、フロント コントローラーを介してコントローラーにアクセスする必要があります。つまり、URL は次のようになります。

url:'/posts'

更新 2

jquery 側では、完全な ajax リクエストの例は次のようになります。

$(".idCheck").click(
   function(){ 
      var idVal = $(this).val();

      $.ajax({ 
         url:'/posts/update_checkbox', 
         data: {id: idVal }, 
         type: 'POST', 
         success:function(result){ 
            $("#dsa").html(result); 
         } 
      }); 
  });

URL にはすでに update_checkbox アクション (つまり、実行するアクションの完全な URL) が含まれており、データ オブジェクトには、サーバーに送信するクリックされた要素の値が含まれていることに注意してください。完全なフォームを送信する場合は、$('#myformselector').serialize() を使用して、フォーム内のすべての入力を ajax リクエストの data プロパティに適したオブジェクトに変換することもできます。

于 2012-07-04T08:27:24.733 に答える