$ .ajax错误功能无效

Yup*_*Yup 6 jquery

我正在研究一些现有的代码.我有以下代码:

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

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

jQuery Ajax错误处理,显示自定义异常消息
jQuery ajax错误函数, Ajax成功和错误函数失败

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

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

确定了以下错误: XMLHttpRequest cannot load file:///android_asset/xxxx/new_source.json?callback=onJSONPLoad. Origin null is not allowed by Access-Control-Allow-Origin. -- From line 1 of null

添加以下代码,应用程序正在成功运行.

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
  webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
}
Run Code Online (Sandbox Code Playgroud)

所以,基本上这种情况正在发生,因为jquery无法访问url.
谢谢每个人帮助我.

Sha*_*tel 15

用过这个

1)替换为: dataType:jsonp用于跨域请求,即对不同域的请求和

dataType:json用于相同域 - 相同的源请求. dataType:"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!');
       }
});
Run Code Online (Sandbox Code Playgroud)

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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

4)检查这个jQuery.ajax

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

jsonp类型附加一个callback =?的查询字符串参数.到URL.服务器应该使用回调名称添加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!');
});
Run Code Online (Sandbox Code Playgroud)