jquery - $.ajax错误函数不起作用

标签 jquery

我正在处理一些现有代码。我有以下代码:

$.ajax({
        type: "get",
        url: url ,
        dataType: "jsonp",
        cache: "false",
        jsonpCallback: "onJSONPLoad",
        success: function(json){
               alert('hi!');
               //perform operation
        },
        error: function() {
          alert('Error occurs!');
       }
});

现在,当我传递有效的 url 时,它工作正常。但是,当我传递无效的 url 时,它应该通过错误警报。但该脚本没有抛出任何错误警报。基本上我想验证 url 参数或者它失败了?请帮助我找出代码中的错误或建议我其他实现方法。我已检查以下链接,但无法解决我的问题:

jQuery Ajax error handling, show custom exception messages
jQuery ajax error function , Ajax Success and Error function failure

更新: 我添加了以下代码来记录 jquery 控制台日志。

  @Override
            public boolean onConsoleMessage(ConsoleMessage cm) {
                Log.d("web chrome client", cm.message() + " -- From line "
                + cm.lineNumber() + " of "
                + cm.sourceId() );
                return true;
            }

发现以下错误: XMLHttpRequest 无法加载 file:///android_asset/xxxx/new_source.json?callback=onJSONPLoad。 Access-Control-Allow-Origin 不允许 Origin null。 -- 从 null 的第 1 行开始

添加以下代码,应用成功运行。

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
  webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}

所以,基本上发生这种情况是因为 jquery 无法访问该 url。
感谢大家帮助我。

最佳答案

用了这个

1)替换这个: dataType: jsonp 跨域请求,即请求到不同的域

dataType: json 用于同域同源请求。 数据类型:“json”

2)您缺少','成功后功能

$.ajax({
        type: "get",
        url: url ,
        dataType: "json",
        cache: "false",
        jsonpCallback: "onJSONPLoad",
        success: function(json){
               alert('hi!');
               //perform operation
        },
        error: function() {
          alert('Error occurs!');
       }
});

3)试试这个

error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Not connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested page not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Requested JSON parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }

4) 检查这个 jQuery.ajax

json类型将获取的数据文件解析为JavaScript对象,并将构造的对象作为结果数据返回。为此,当浏览器支持时,它会使用 jQuery.parseJSON() ;否则它使用 Function 构造函数。格式错误的 JSON 数据将引发解析错误(有关更多信息,请参阅 json.org)。 JSON 数据方便以简洁且易于 JavaScript 解析的方式通信结构化数据。如果获取的数据文件存在于远程服务器上,请指定 jsonp 类型。

jsonp类型附加一个查询字符串参数callback=?到网址。服务器应在 JSON 数据前面添加回调名称,以形成有效的 JSONP 响应。我们可以使用 $.ajax() 的 jsonp 选项指定除回调之外的参数名称。

注意:JSONP是JSON格式的扩展,需要一些服务器端代码来检测和处理查询字符串参数。有关它的更多信息可以在详细说明其用途的原始帖子中找到。

当从远程服务器检索数据时(只能使用脚本或 jsonp 数据类型),错误回调和全局事件将永远不会被触发。

但是你需要先触发代码:

var req = $.ajax({
    url : url,
    dataType : "jsonp",
    timeout : 10000
});

req.success(function() {
    console.log('Yes! Success!');
});

req.error(function() {
    console.log('Oh noes!');
});

关于jquery - $.ajax错误函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997341/

相关文章:

javascript - 从外部元素控制 Flexslider。

javascript - $(window).scroll() 在 IE 9 中不起作用

jquery - 如何使用 jquery 分页在页面上显示 (1-15) 条 50 条记录

javascript - 如何在不刷新页面的情况下在前端显示更新的数据?

javascript - 我制作了一个带有可编辑单元格的 HTML 表格。当我编辑单元格时,我需要该行及其下面的行来重新计算

jquery - 如何切换下拉箭头

javascript - jQuery - fadeIn 仅在 Firefox 中不起作用

jquery - Bootstrap 轮播不滑动

jquery - CSS 水平滚动溢出与 jQuery slider

jquery - 创建像 Monster Jobs 这样的求职网站