远程自动完成的错误处理无效

时间:2014-06-19 09:28:48

标签: javascript jquery json

我有这个jquery自动完成代码。一切都工作正常数据加载等。成功工作。但是当我有错误...错误处理不能在下面的代码。

 $("#autocomplete").on("filterablebeforefilter", function (e, data) {

      if (value && value.length > 0) {
        //$ul.listview("refresh");
             $('.ui-responsive-panel').enhanceWithin();
             $.ajax({
                       type: "GET",
                       url: "http://domain.com/food.php",
                       dataType: "jsonp",
                       crossDomain: true,
                       data: $(this).serialize(),
                       success: function (data) {
                            alert("success");
                       },
                       error: function () {
                             alert("an error occurred!");
                       },
                       beforeSend: function () {
                            // This callback function will trigger before data is sent
                       },
                       complete: function () {
                            setTimeout(function () {}, 1);
                       }
                     })
                     .then(function (response) {
                             $.each(response, function (i, val) {
                                 //do something with data
                             });
                         }
                 });

2 个答案:

答案 0 :(得分:1)

正如jQuery doc声明jQuery.ajax错误处理函数:

  

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

它与JSONP的技术有关,其中实际请求被注入<script>标记。因此,包含ajax错误事件的标准jqXHR对象不可用。有一些插件作为可用的解决方法。这个插件和解决方案用于处理网络超时,例如,在thisthis stackoverflow问题中。

答案 1 :(得分:0)

尝试处理then中的错误(或使用done()fail()

  $.ajax({
           //... code omitted ...
                 })
                 .then(
                     function (response) {
                         $.each(response, function (i, val) {
                             //do something with data
                         });
                     },
                     function (error) {
                         //do something with error
                     }
             });