2012-11-14 64 views
0

我一直在研究這個問題一段時間,並且看到了很多不同的方法。我有我認爲應該工作的代碼,但出於某種原因不是。關於jQuery的PHP函數AJAX

這裏是我的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模式來刪除表,並且它們會很好地放下。只是當我試圖用這個按鈕來做。

任何想法或指針都會很棒!

另外我看到這個問題,"Calling PHP function using JQuery .ajax()",但他的問題是語法,我非常確定我的IDE我沒有語法錯誤,從我看到這是解決方案發布。

UPDATE

多虧了一些建議,我能得到一個測試,將確認PHP代碼本身的工作,但實際上不是由AJAX調用執行。本質上,我只是運行創建表的頁面,即index.php,然後將瀏覽器導向到exit.php,並按照我的預期刪除表。所以唯一的結論是exit.php實際上並沒有被AJAX調用所調用/執行。

我不知道這可能是問題,但這裏是我的實際網址分配(或多或少):我曾試圖url: "exit.php"以及url: "/folder1/folder2/folder3/folder4/exit.php",所以我不知道我是否需要完整的根路徑該文件或不,或者如果這是一些如何的問題。在這一點上,我只是頭腦風暴,因爲我至少現在知道php沒有被正確執行或打開。

UPDATE

好感謝Salivador走我通過一些故障排除問題解決。基本上,代碼是正確的。所以,如果你需要做這樣的事情,請隨時使用它,但是不要做我所做的事情,並弄亂文件路徑!

臉手掌

+0

我會開始在你的php文件('ini_set('display_errors',1);')中顯示所有錯誤,並在你的成功回調中執行'console.log(data);'。 – jeroen

+0

謝謝,我現在就試試 – defaultNINJA

回答

1

你的Ajax調用執行,但你確定你的PHP代碼正確執行和預期?

嘗試輸出$tempTableName以查看您是否確實爲您的表獲取了正確的名稱,請嘗試查看odbc_exec(...)命令的響應以查看刪除的結果。

+0

那種我所關心的是。我的主要「頁面」由HTML模板形式和iframe「報告」組成。我試圖想出一種創造性的方式來測試php,以確保它完全被執行,但是一個簡單的'echo'不是一個選項。雖然也許我可以模板一個HTML腳本來做'tempTableName'的另一個JavaScript警報。我也會給那個鏡頭。 – defaultNINJA

+0

好吧,我的PHP沒有被調用或跑。總的來說,我對PHP相當陌生,我的背景是C++,Java和Obj-C,所以我掌握了很多概念,但有時候會使用某些函數,比如json,還有什麼不是我不確定如何使用。然而,我做了下一件最好的事情。我運行了創建該表的文件。表已創建。手動將瀏覽器導向到exit.php文件,並將其刪除。我會用新的信息更新這個問題,這些信息對我來說很重要,可以幫助解決這個問題。 – defaultNINJA

+0

薩爾瓦多你真棒。這是目錄路徑。我們有一個安全ID需要被傳遞來訪問瀏覽器中的頁面,雖然沒有想到它會在java腳本的url中被需要。謝謝! – defaultNINJA

1

快速反應是,SqlCommand的由包括分號,刪除

下面有一個替代方法中,在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"); 
     } 
    } 
}); 
} 

做的只是一個方式,我個人難道不使用一個onclick火的功能,我寧願選擇必然事件

你爲什麼要在會話中存儲的數據該表的名字嗎?一個表單var會更好嗎?

+0

我沒有真正使用會話變量,我正在使用一家公司設計的自定義類來存儲信息。我只是把它們放在一起,讓我理解我想要完成的事情。該對象就像一個會話,並允許我跨多個重新加載訪問該名稱,因爲它已經在那裏,我只是決定以這種方式訪問​​它。爲了讓html在調用函數時包含表名,我將不得不更改模板,並在重新加載時將其傳入,我想這不會是什麼大問題,但看起來有點混亂。表名是隨機生成的。 – defaultNINJA

+0

雖然我現在知道的一些更多的測試是,PHP不執行AJAX調用。我可以運行獨立於ajax調用的php頁面,它的工作原理與我期望的一樣。 – defaultNINJA