【问题标题】:AJAX Post Not Sending Data?AJAX Post 不发送数据?
【发布时间】:2011-02-21 13:47:02
【问题描述】:

我一生都无法弄清楚为什么会发生这种情况。

这是一种转发,请原谅我,但我有新数据。

我正在运行一个名为 logOut() 的 javascript 注销函数,它对 php 脚本进行了 jQuery ajax 调用...

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

【问题讨论】:

  • 你亲眼目睹了这一切吗?浏览器类型/版本似乎很重要吗?某人或某物(蜘蛛/机器人)可能正试图直接访问该 php 页面......这将导致它下降到“POST FAIL”。我知道 googlebot 有时会转到我的仅用于 ajax 的 php 页面
  • @jack,这个网站仍处于开发阶段,所以我很肯定只有我,因为我是那个试图退出的人!我设置了注销失败查询,让我知道为什么我一开始就无法注销。不过感谢您提供的信息,我一定会尝试阻止蜘蛛访问该页面。
  • @jack(第 2 部分)我起初以为只是 FireFox...但它也开始在 Safari 和 IE 中发生。
  • hmm...Firebug 是否给您任何错误?另外,如果是我,我会尝试将 data.log_out 更改为类似“yes”的字符串而不是布尔值。
  • @jack Firebug 没有报告任何错误。下次出现这种情况时,我将尝试将 data.log_out 更改为字符串。然后电脑就从窗口出去了。

标签: php ajax post


【解决方案1】:

好的,对于那些感兴趣的人。

我删除了完整的 URL http://www.mydomain.com/functions.php 并将其替换为本地路径 functions.php 就可以了。

显然,AJAX 在跨域 ajax 调用方面存在问题,而且我不在专用服务器上,所以我想每隔几个小时(或几分钟)就会发生一次我以某种方式从不同位置访问我的脚本,导致 AJAX 关闭发布数据。

-J

【讨论】:

  • 您能否将您的答案标记为正确答案并结束这个问题?只是这样人们就不会认为你还在拍戏剧......
  • @Lucanos,我很乐意。但是,stackoverflow 说我必须等待 2 天才能接受我自己的答案。
  • 很公平(我听说有限制,但我不确定细节)。
【解决方案2】:

尝试在 jquery $.ajax 函数上启用错误报告,您的代码将类似于

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);
       }
    });
}

看看这是否能说明你的情况。

【讨论】:

  • 谢谢你.. 但我只是想通了,这是因为“mydomain.com/function.php”没有在本地阅读。出于某种原因,AJAX 认为这是每隔几个小时就会进行一次跨站点调用......绝对是服务器问题。
【解决方案3】:

我有一种强烈的感觉,这更像是服务器端的问题,而不是客户端的问题。

奇怪的是,您会在一段时间内看到问题。如果客户端可以正常工作,那么至少刷新页面或重新启动浏览器应该可以修复它。

函数末尾的 die() 是可疑的,但我不太确定它会如何影响它。

顺便说一句,您可以在 FireBug 的“网络”选项卡中看到 http 标头,以了解这些参数是否已正确发送。

【讨论】:

  • 我刚刚弄清楚并发布了答案。感谢您对此的投入。我不得不将 die() 命令放在那里以确保我的脚本不会继续运行,并在脚本末尾将“POST FAIL”发布到数据库。
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多