2010-05-19 104 views
1

我不能爲了我的生活找出爲什麼會發生這種情況。AJAX發佈不發送數據?

這是一種轉發,請原諒我,但我有新的數據。

我正在呼籲退出()有做一個jQuery AJAX調用到PHP腳本中的JavaScript註銷功能...

function logOut(){ 
    var data = new Object; 
    data.log_out = true; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/functions.php', 
     data: data, 
     success: function() { 
      alert('done'); 
     } 
    }); 
} 

PHP函數調用是在這裏:

if(isset($_POST['log_out'])){ 
    $query = "INSERT INTO `token_manager` (`ip_address`) VALUES('logOutSuccess')"; 
    $connection->runQuery($query); // <-- my own database class... 
    // omitted code that clears session etc... 
    die(); 
} 

現在,18小時以外的工作,但由於某種原因,每隔一段時間,POST數據將不會觸發我的查詢。 (這將持續大約一個小時左右)。 我想通後的數據沒有被我的腳本的末尾添加此設置...

$query = "INSERT INTO `token_manager` (`ip_address`) VALUES('POST FAIL')"; 
$connection->runQuery($query); 

所以,現在我知道某些我的註銷功能被跳過,因爲在我的數據庫是下面的數據:

alt text http://img535.imageshack.us/img535/2025/screenshot20100519at125h.png

如果不被跳過它,我的數據會出現這樣的:

alt text http://img25.imageshack.us/img25/8104/screenshot20100519at125.png

我知道它被跳過的原因有兩個,其中一個是我的第一個函數結束時的die(),另外兩個是,如果成功,則會在表中註冊「logOutSuccess」。

有什麼想法?一位朋友說這是一家非常棒的託管公司(hostgator.com)。我個人喜歡他們,因爲他們很便宜,我是cPanel的粉絲。但是,如果是這樣的話?

在此先感謝。

-J

+1

你見證過這種情況嗎?瀏覽器類型/版本似乎很重要?有人或事情(蜘蛛/機器人)可能會試圖直接去那個PHP頁面...這會導致它下降到「POST FAIL」。我知道googlebot有時會進入我的php頁面,這些頁面僅適用於ajax – Jack 2010-05-19 20:21:43

+0

@jack,這個網站仍處於開發階段,所以我積極的只是我,因爲我是一個試圖註銷的人!我設置了註銷FAIL查詢,讓我知道爲什麼我無法首先註銷。感謝那些信息,但我一定會嘗試阻止蜘蛛訪問該頁面。 – 2010-05-19 20:27:56

+0

@jack(第2部分)我想起初它只是FireFox ......但它也開始在Safari和IE中發生。 – 2010-05-19 20:28:50

回答

4

好的,對於那些感興趣的人。

我刪除了完整的URL http://www.mydomain.com/functions.php ,並用本地路徑functions.php替換它,並做了訣竅。

顯然AJAX有跨域AJAX調用的問題,我不是在專用服務器上,所以我想象發生了什麼事每隔幾個小時(或幾分鐘)我不知何故從不同的位置點擊我的腳本導致AJAX解僱POST數據。

-J

+0

您能否將您的答案標記爲正確答案並關閉此問題?所以人們不認爲你仍然有戲... – 2010-05-20 06:36:44

+0

@Lucanos,我很樂意。但是,stackoverflow說,我必須等待2天才能接受我自己的答案。 – 2010-05-20 07:11:37

+0

夠公平(我聽說有限制,但我不確定細節)。 – 2010-05-20 12:05:30

0

嘗試啓用錯誤了jQuery $就功能報告,您的代碼會看起來像

function logOut(){ 
    var data = new Object; 
    data.log_out = true; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/functions.php', 
     data: data, 
     success: function() { 
      alert('done'); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert(textStatus+" - "+errorThrown); 
     } 
    }); 
} 

看看是否能在您的情況揭示光。

+0

謝謝你..但我只是想通了,這是因爲「http://www.mydomain.com/function.php」不能在本地閱讀。出於某種原因,AJAX認爲這是一個跨幾個小時的跨站點調用......絕對是一個服務器問題。 – 2010-05-19 21:46:42

0

我有一種強烈的感覺,這是更多的服務器端問題,而不是客戶端。

奇怪的是,你看到一段時間的問題。如果客戶端可以工作,那麼至少刷新頁面或重新啓動瀏覽器應該修復它。

函數結尾處的die()是可疑的,但我不太確定它會如何影響它。

順便說一下,你可以在FireBug的Net選項卡中看到http標題,以知道這些參數是否已正確發送。

+0

我剛剛發現併發布了答案。感謝您輸入。我必須將die()命令放在那裏以確保我的腳本不會繼續運行,並在腳本末尾將「POST FAIL」發佈到數據庫。 – 2010-05-19 21:50:13