我有一个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");
});
答案 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