1

AJAXとPHPの接続に問題があります。主な目標は、画像を削除するメソッドを実行できるリクエストをPHPに送信することです。すべてが素晴らしくシンプルに聞こえますが、接続全体が正しく機能していません-基本的にはまったく機能していません。

これは、私が達成したいことについての最も簡単な例です。

jQueryコード:

$("span.deleteTmp").live("click", function() {
    obj_a = $(this);
    if (confirm("Want to delete the file?")) {
        $.ajax({
            url: "index.php?mode=functions&method=deleteFile",
            data: {
                pict_name: obj_a.attr("id")
            },
            dataType: "json",
            success: function(data) {
                alert(data.msg);
                if (data.success == true) {
                    obj_a.parents("li").remove();
                }
            }
        });
    }
});​

PHPのサンプルコード:

/* invoking methods */
if(isset($_GET['method'])) {
   $method = $_GET['method'];
   call_user_func($method);
}

/* methods */
function deleteFile() {
   $result = array('success'=>true, 'msg' => "OK");
   echo json_encode($result);
}

さらに、ブラウザのindex.php?mode = Functions&method = deleteFileと入力すると、次のような正しい応答が返されます。{"success":true,"msg":"OK"}

この場合、私は何を間違っていますか?

4

3 に答える 3

0

クエリURLに直接アクセスしたときに期待される応答が得られる場合は、前の手順が機能していることを確認する必要があります。Firebugを使用するか、「要素の検査」などを使用してみてください(使用しているブラウザによって異なります)。次に、[ネットワーク]タブに移動して、リクエストが送信されているかどうかを検査し、変数の値が正しいことを確認します。そうでない場合は、「クリック」イベントを取得しようとしている要素のクラス名にタイプミスや間違った名前などのより明白なエラーがないことを確認してください。

于 2012-08-18T11:01:40.070 に答える
0

たとえば、次のように、JSON結果を出力する前にヘッダーを設定してみてください。

function deleteFile() {
   $result = array('success'=>true, 'msg' => "OK");
   header('Cache-Control: no-cache, must-revalidate'); // prevent the browser from caching the response
   header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // prevent the browser from caching the response
   header('Content-type: application/json'); // sets the correct MIME type for JSON
   echo json_encode($result);
}
于 2012-08-18T11:38:55.650 に答える
0

JQueryを使用しているので、これをJQueryで記述します。

まずlive、非推奨または非推奨のいずれかです。

もう1つのヒントは、GETを使用してサーバーからデータを変更および削除しないことです。これは、誰かがそれを簡単に悪用する可能性があるためです。また、GETが実際の検証なしで、どの関数を次のように実行するかを指示できるようにしますindex.php?mode=functions&method=deleteFile。誰かがそれを簡単に変更して、Webサイトから直接実行したくない関数を定義することができます。

したがって、最初に行うことは、ライブをon()に変更することです。

$(".deleteTmp").on('click', function(e){
    if(confirm('delete?'){
        $.get('index.php', {mode: 'functions', method: 'deleteFile', pict_name: $(this).attr('id')}, function(data){
            console.log(data);
        }, 'json');
    }
});

そのような何かがあなたに正しい結果を与えるはずです。f12でコンソールを開き、何が返されるかを確認します。もちろん、要素をクリックしたときに実際のイベントが実行されていることを確認します。ばかげているように聞こえますが、AJAXがなぜそうならないのかを考えて何時間もそこに座っているのを間違えました。イベントを発生させていないことを確認するためだけに実行しますclick

編集

しかし、私はあなたの実際の問題を見ています。最初にURLでJQueryの2つのGETを定義しています。

index.php?mode=functions&method=deleteFile",

次に、データで:

pict_name: obj_a.attr("id")

私が正しく覚えていれば、このコンテキストでのJQueryは、実際には次のAJAX呼び出しを起動します。

index.php?pict_name=whatever

だから上記の私のコードを試してみてください。

于 2012-08-18T11:51:24.233 に答える