0

我一直在解决这个问题一段时间,并看到了很多不同的方法。我有我认为应该可以工作的代码,但由于某种原因不能。

这是我的 JavaScript 代码文件名 - test.js:

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

我放置警报纯粹是为了测试目的,以确保正在进行 AJAX 调用,并且确实如此。

这是使 AJAX 调用文件名 - form.template 的按钮的 HTML:

<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 模式来删除表,并且它们会很好地删除。只是当我尝试使用此按钮进行操作时。

任何想法或指示都会很棒!

我也看到了这个问题,“Calling PHP function using JQuery .ajax()”,但他的问题是语法,我很确定我的 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

快速反应是 sqlcommand 包含一个分号,删除它

这是另一种方法,在您的 php 代码中执行此操作

html

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

退出.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"); 
        }
    }
});
}

只是一种方法,我个人不会使用 onclick 来触发该功能,我更喜欢选择器绑定事件

为什么要将此表名存储在会话数据中?表单变量不会更好吗?

于 2012-11-14T21:35:20.870 回答
1

您的 ajax 调用已执行,但您确定您的 PHP 代码已按预期正确执行吗?

尝试输出$tempTableName以查看您是否真的为您的表获得了正确的名称,尝试查看odbc_exec(...)命令的响应以查看删除的结果是什么。

于 2012-11-14T20:57:49.873 回答