2010-05-19 132 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