ajax.done函数不起作用

时间:2013-06-07 19:33:32

标签: javascript jquery ajax

我有一个ajax函数,我希望它在完成后执行一些代码。我有这个,但它不起作用。警报不会弹出。

$.ajax({
    type: "get",
    url: "http://www.sinansamet.nl/chatdistract/ajax/getRooms.php",
    success: function(html) {
              $("#"+id+" ul").append(html);
              $("#"+id+" ul").listview("refresh");
            }
    }).done(function(){
        alert("Hello");
    });

3 个答案:

答案 0 :(得分:3)

正如@karthikr在他的评论中所说,使用success:.done()是没有意义的,因为他们做同样的工作。但是在成功连接时,它们都应该运行。那说......

您的问题可能是因为您正在访问其他域,该域永远不会解析,因此永远不会触发.done()

尝试将.done()更改为.always(),这可以解决连接是否成功的问题。

答案 1 :(得分:1)

我认为一个合适的问题是,你收到错误吗?我注意到您正在使用完整域名来处理您的请求,这在现代浏览器中需要CORS,并且不能在IE中使用< 10(jQuery不使用IE特定的跨域请求对象,iirc也需要CORS)。

“完成”方法(使用jQuery 1.5.x的promises重构实现)在发生错误时不会触发。 http://api.jquery.com/jQuery.ajax/

尝试以下代码段,并在浏览器中查看您的JS控制台。

$.ajax({
    type: "get",
    url: "http://www.sinansamet.nl/chatdistract/ajax/getRooms.php",
  })
  .done(function(data, textStatus, jqXHR){ //same as .success (depricated as of 1.8)
    console.log("done");
    console.dir(arguments);
  })
  .fail(function(jqXHR, textStatus, errorThrown){ //replaces .error
    console.log("error");
    console.dir(arguments);
  })
  .always(function(/*data|jqXHR, textStatus, jqXHR|errorThrown*/){ //replaces .complete
    console.log("always");
    console.dir(arguments);
  })
  ;

答案 2 :(得分:0)

你在做跨域ajax通话吗?如果您与www.sinansamet.nl不在同一个域中,则Ajax调用将失败。

让服务器执行跨域调用或使用crossdomain.xml