【问题标题】:Why does jquery ajax callback function not work?为什么jquery ajax回调函数不起作用?
【发布时间】:2012-05-12 10:17:32
【问题描述】:

我在使用 jQuery ajax 中的简单回调函数时遇到问题。谷歌不会提供帮助,堆栈溢出也不会,所以我想这可能不是特定的东西,而是我太无知而无法看到的东西。对我来说,代码看起来和它应该的完全一样。

所以,这里是代码:

function sendMessage(message)
{
//Establish connection to php script
$.ajax({
    type: 'POST',
    url: 'action/chat/test.php',
    success: function(feedback){

        alert(feedback);

    }
}).error(function(){
    //Do some error handling here
});
}

在 test.php 中它只是说

<?php
    echo "called";
?>

就我而言,应该提醒“被调用” - 但事实并非如此。 我已经检查了函数 sendMessage() 是否被调用(参数消息现在无关紧要)。

有人知道吗?

【问题讨论】:

  • 您有任何脚本错误吗?检查萤火虫控制台。
  • 如果您在sendMessage() 的开头添加警报,它会显示吗?
  • 两个最可能的选项:Javascript 错误导致 AJAX 请求无法发送,或者 AJAX 请求出现问题,这意味着执行了 error,而不是 success,回调函数。使用您的浏览器调试器将是一个很好的第一步。
  • 在浏览器中访问action/chat/test.php是否有效?当您运行 AJAX 时,您的服务器日志是否显示该文件被命中?
  • 您的网址错误。尝试将其更改为 /action/chat/test.php

标签: jquery ajax callback jquery-callback


【解决方案1】:

仅供参考,有一种行为可能会以这种方式结束(即 done() 未调用)。

这里是:

  1. 假设您需要一个 JSON 对象(您使用“Accept”请求它 哑剧类型)。
  2. 假设 Json 字符串无效。

在这种情况下 done() 永远不会被调用,但 always() 会被调用。在 always() 中,您将得到“错误”格式的纯文本答案。

【讨论】:

    【解决方案2】:

    更新:还有一点需要注意,确保您使用某种调试器,例如 firebug。然后你可以去network选项卡,手动查看request url和response,看看它是否收到200响应或内部服务器错误等。

    尝试在您的成功函数中添加console.log(data); 以查看是否返回任何内容。

    你也可以使用.always(data):

    function sendMessage(message)
    {
      //Establish connection to php script
      $.ajax({
          type: 'POST',
          url: 'action/chat/test.php'   
      }).done(function(data) { console.log(data); })
        .fail(function() { alert("error"); })
        .always(function() { alert("complete"); });
    }
    

    来自文档:

    弃用通知: jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调 将在 jQuery 1.8 中弃用。要为最终删除代码做好准备,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

    【讨论】:

    • 我发现问题了!从我的 apache 访问文件存在一些问题。不允许 Apache 读取该文件 - 尽管我只是像往常一样使用 Coda 创建它。现在回调起作用了。我刚刚加入了堆栈溢出,不得不说我对所有快速答案感到不知所措!谢谢!
    • 还有一点需要注意,确保您使用某种调试器,例如 firebug。然后你可以去网络选项卡,手动查看请求的url和响应,看看它是否收到200响应或内部服务器错误等。
    【解决方案3】:

    这可能是错误处理。如果你想处理错误,还有另一个属性可以给你传递给ajax的对象,它是“错误”,也是处理页面超时的“超时”。查找 $.ajax 函数,您会发现这些属性。

    【讨论】:

    • 当我之前尝试使用带有警报的错误处理时,它没有发出任何警报。现在确实如此。 php文件好像有问题,虽然路径是正确的。
    • 我发现问题了!从我的 apache 访问文件存在一些问题。不允许 Apache 读取该文件 - 尽管我只是像往常一样使用 Coda 创建它。现在回调起作用了。我刚刚加入了堆栈溢出,不得不说我对所有快速答案感到不知所措!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多