0

私はこの問題にしばらく取り組んできましたが、さまざまなアプローチを見てきました。動作するはずのコードがありますが、何らかの理由で動作していません。

これが私のJavaScriptコードファイル名です-test.js:

function deleteTempTable() {
    $.ajax({
        url: "exit.php",
        success: function(data) {
            alert("Deleting Temp Table");
        }
    });
}

AJAX呼び出しが行われていることを確認するために、純粋にテスト目的でアラートを配置しました。

AJAX呼び出しファイル名を作成するボタンのHTMLは次のとおりです--form.template:

<input type="button" title="Click to close window" value="Close" 
 onclick="deleteTempTable();" style="width:80px" name="close">

これは、JavaScriptアラートを問題なく受け取るので機能します。

これが私が使用しているphpコードの例です(共有できないもの、カスタムクラスなどがあるため、正確ではありません。他の場所でこの同じパターンを再利用しましたが、正常に動作し、テーブルを削除します必要に応じて)ファイル名-exit.php:

<?php
session_start();

require $_SERVER['DOCUMENT_ROOT'] . "path/to/file.php";

$tempTableName = $_SESSION['tempTableName'];

//Not really hard coding this it's just an example
$odbcConn = odbc_connect('DataBaseName', 'UserName', 'Password'); 

$sqlCmd = "DROP TABLE IF EXISTS $tempTableName;";

odbc_exec($odbcConn, $sqlCmd);
?>

ボタンをクリックするとJavaScriptアラートがポップアップしますが、テーブルがまだ存在するため、phpが無視されているため表示されます。私のコードの他の場所では、同じphpパターンを使用して、新しいデータセットが要求されたときにテーブルを削除し、それらは正常に削除されます。私がこのボタンでそれをやろうとしたときだけではありません。

どんなアイデアや指針も素晴らしいでしょう!

また、 「JQuery .ajax()を使用してPHP関数を呼び出す」という質問も見ましたが、彼の問題は構文でした。IDEで構文エラーが発生していないことは間違いありません。これから、これを確認しました。投稿されたソリューションです。

アップデート

いくつかの提案のおかげで、phpコード自体が機能することを確認するテストを取得できましたが、実際にはAJAX呼び出しによって実行されていません。基本的に、テーブルを作成したページ、つまりindex.phpを実行し、ブラウザーにexit.phpを指示すると、予想どおりにテーブルが削除されました。したがって、唯一の結論は、exit.phpが実際にはAJAX呼び出しによって呼び出されたり実行されたりしていないということです。

これが問題になる可能性があるかどうかはわかりませんが、実際のURLの割り当ては次のとおりです(多かれ少なかれ):url: "/folder1/folder2/folder3/folder4/exit.php"私も試しurl: "exit.php"たので、ファイルへの完全なルートパスが必要かどうかわかりません。これが何らかの問題である場合。この時点では、少なくともphpが正しく実行または開かれていないことがわかっているので、ブレインストーミングを行っています。

アップデート

Salivadorがトラブルシューティングを行ってくれたおかげで、問題は解決しました。基本的にコードは正しいです。したがって、このようなことを行う必要がある場合は、自由に使用してください。ただし、私が行ったことを行わず、ファイルへのパスを台無しにしてください。

手のひらに直面

4

2 に答える 2

1

ajax呼び出しが実行されますが、PHPコードが正しく、意図したとおりに実行されていることを確認しますか?

を出力して$tempTableName、テーブルの正しい名前を実際に取得しているodbc_exec(...)かどうかを確認し、コマンドの応答を確認して、削除の結果を確認してください。

于 2012-11-14T20:57:49.873 に答える
1

簡単な反応は、sqlコマンドにセミコロンが含まれていることです。それを削除してください

ここに別の方法があります、あなたのphpコードでこれをしてください

html

  <input type="button" title="Click to close window" value="Close" 
   onclick="deleteTempTable('mytable');" style="width:80px" name="close">

exit.php

 if($_REQUEST['command'] == 'droptable') {  
echo dropTable($_REQUEST['tablename'] ));   
 }
 ...
 function dropTable($tableName){
 /*your sql stuff/code here*/
 $sqlCmd = 'Drop Table '.$tablename;
 $rz = odbc_exec($odbcConn, $sqlCmd);
      if (!$rz){
      $result = true;
      } else {
      $result = false;
      }
 return $result;
 }

その後、これを行うことができます

function deleteTempTable(tablename) {
var params = 'command=droptable&tablename='+tablename;
$.ajax({
    url: "exit.php?"+params,
    success: function(data) {
        if(data == true) {
        alert("Deleting Temp Table");
        } else { 
          alert("Didnt work"); 
        }
    }
});
}

それを行う1つの方法、私は個人的にonclickを使用して関数を起動することはなく、セレクターにバインドされたイベントを好みます

このテーブル名をセッションデータに保存するのはなぜですか?フォーム変数はうまく機能しませんか?

于 2012-11-14T21:35:20.870 に答える