我正在研究一些现有的代码。我有以下代码:
$.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 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);
}
所以,基本上这种情况正在发生,因为jquery无法访问url 感谢每个人帮助我。
答案 0 :(得分: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!');
}
});
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 =的查询字符串参数?到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!');
});
答案 1 :(得分:1)
您在成功函数后缺少逗号,并且还将dataType更改为json
$.ajax({
type: "get",
url: url ,
dataType: "json",
cache: "false",
jsonpCallback: "onJSONPLoad",
success: function(json){
alert('hi!');
//perform operation
},
error: function() {
alert('Error occurs!');
}
});
答案 2 :(得分:1)
最近在chrome 52(2016年8月)中引入的一个错误也可能导致这种行为。 总而言之,它不会持续很长时间。
https://bugs.chromium.org/p/chromium/issues/detail?id=633696
它与初始问题并不严格相关,因为它只触发从onSuccess处理程序启动的GET请求,但我提到了其他可能在此问题上搜索帮助的人。
答案 3 :(得分:0)
试试这个。
$.ajax({
type: "get",
url: url ,
dataType: "jsonp",
cache: "false",
jsonpCallback: "onJSONPLoad",
success: function(result){
alert('hi!');
//perform operation
},
error: function( req, status, err ) {
console.log( 'something went wrong', status, err );
alert('something went wrong'+ status + err);
}
});
还读这个。 http://api.jquery.com/jQuery.getJSON/#entry-examples
然后试试
$.getJSON()
代替$.ajax()