0

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

3 回答 3

3

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

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

尝试更改.done().always(),这将解决连接成功或失败的问题。

于 2013-06-07T19:37:04.160 回答
1

我认为一个适当的问题是,您是否遇到错误?我注意到您正在为您的请求使用完整域,这在现代浏览器中需要CORS,并且在 IE < 10 中不起作用(jQuery 不使用 IE 特定的跨域请求对象,iirc 也需要 CORS )。

"done" 方法(在 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);
  })
  ;
于 2013-06-07T19:42:34.413 回答
0

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

要么让服务器进行跨域调用,要么使用 crossdomain.xml

于 2013-06-07T19:43:54.160 回答