我正在编写一个小的reddit图像查看应用程序,如果用户输入有效的子reddit,它可以正常工作。但我正在尝试处理一个不存在的reddit的情况,无法弄明白。
function load_data(after) {
$.ajaxSetup({
"error": function () {
// this gets called every time, even for a valid sub-reddit
location.href = 'index.html';
}
});
fetchUrl = 'http://reddit.com/r/' + subreddit + '.json?jsonp=process_images&after=' + after;
$.ajax({
type: "GET",
url: fetchUrl,
dataType: "jsonp",
cycleTime: 1,
success: process_images
// error: handle_error <- this doesn't work, because we're using jsonp
// but if I take out jsonp, my whole app doesn't work any longer, since
// I'm trying to run it as a local .html file, and cross-site scripting
// security prevents it
});
}
load_data(after);
这是服务器的响应。但我无法在.ajax方法中处理它:
GET http://www.reddit.com/r/%3Blk%3Blkl%3B.json?jsonp=process_images&after=&callback=jQuery1510605472848052159_1310668370375&_=1310668370433 404 (Not Found)
有什么想法吗?
我在这里尝试了一些建议,比如jQuery.getJSON doesn't trigger callback - 但它每次都显示基本相同的错误,并且没有调用'jQuery #####'的随机数字。
答案 0 :(得分:4)
请看this answer另一个问题。
本质上,它是JQuery中jsonp实现的一个限制。流行的答案是使用this js插件。
答案 1 :(得分:2)
实际上这是跨域脚本注入的限制,这是jQuery用于JSONP的。
jquery-jsonp plugin和更新版本的jQuery都通过实现超时来解决这个问题。他们仍然无法捕获错误。
更好的解决方案是尽可能使用CORS (Cross-Origin Resource Sharing)。
较新版本的jQuery支持CORS,但浏览器和远程站点也必须支持它。
所有主要桌面浏览器的当前版本仅支持版本10的CORS,Internet Explorer。
答案 2 :(得分:1)
您可以在服务器响应中添加一些标题,以便在需要时允许跨域...
答案 3 :(得分:0)
$.ajax({
statusCode: {
404: function() {
//handle the 404 here
alert('page not found');
}
}
});
这是ref:http://api.jquery.com/jQuery.ajax/
修改强>
不能与jsonp合作,请参阅ccurrens的上述答案