9

我在 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() (参数消息现在无关紧要)。

有谁有想法吗?

4

3 回答 3

13

更新:还需要注意一件事,确保您使用某种调试器,例如 firebug。然后您可以转到网络选项卡并手动查看请求 url 和响应,以查看它是否收到 200 响应或内部服务器错误等。

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

你也可以使用.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()。

于 2012-05-02T22:01:21.830 回答
4

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

这里是:

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

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

于 2014-07-29T09:50:10.567 回答
1

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

于 2012-05-02T21:55:51.707 回答