jQuery AJAX请求获得响应但没有触发回调

时间:2014-03-16 22:45:11

标签: javascript jquery ajax

我有这样的代码:

$.ajax({
     method: "GET",
     url: page,
     dataType: 'html',
     data:data,
     success: function(data){
        console.log(data);
     },
     error: function(){
        console.log('error');
     }
 });

使用Chrome或Firefox的调试程序,我可以看到请求成功,响应为200 OK,响应包含预期数据。 但问题是,没有任何回调会引发任何回调。 "成功"不开火也不开错#34;错误"。此外,也没有延迟方法,例如"完成","然后",或"始终"。

过去几个小时我一直试图解决这个问题无济于事。我完全失败了。我也尝试过使用诸如" $。get"等方法。结果相同。

简而言之,我得到了响应,但是jQuery中的代码没有触发任何回调,并且在控制台中没有任何可见错误。

2 个答案:

答案 0 :(得分:1)

我在代码中看到错误的一件事是:

method: "GET",

应该是:

type: "GET",

我在jQuery doc中看不到method的任何文档属性。 type属性应默认为"GET",因此这可能不是唯一的错误。


此外,有些情况下,即使ajax调用失败(在跨域请求中),也不会调用error回调。来自error回调的jQuery文档:

  

不会为跨域脚本和跨域JSONP请求调用此处理程序。

这是因为jQuery期望服务器发回特定形式的javascript,如果服务器没有做出预期的事情,那么jQuery永远不会知道请求何时返回并且无法处理它

在这些情况下,您经常需要弄清楚在调试器中查看网络跟踪时可能出现的问题。


要检查的其他事项,以确保您不会意外跨域:

  • 确保ajax调用与页面之间的域/子域完全相同。例如,一个常见的错误是一个人有www.而另一个没有。
  • 使网页和ajax网址都相同httphttps
  • 如果使用非标准端口号,请确保page和ajax URL使用相同的端口。

答案 1 :(得分:0)

以下代码有效。另请注意,AJAX不适用于跨站点脚本。 如果您想获得错误,可以打印" errorThrown"

<script>
    $(document).ready(function () {
        $('#getLink').on("click", function () {
            var url = $("#myUrl");
            alert(url.val());
            $.ajax({

                type: "GET",
                url: url.val(),
                dataType: 'html',
                success: function (data, textStatus, xhr) {
                    $("#data").text(textStatus);
                },
                error: function (data,textStatus, errorThrown){
                    $("#data").text(errorThrown);
                }
            });
        });

    });

</script>

<input id="myUrl" name="myURL" type="text" value="http://localhost:35460/Home/TestPage.cshtml" />
<input type="button" value="getLink" id="getLink">
<span id="data"></span>