当使用jQuery Ajax函数时,在指定错误和成功处理程序时,您期望指定的错误处理程序功能捕获无效文件和404错误,但是由于某些原因我的代码没有。
码:
// using jQuery 3.4.1
// this code has been taken from a larger function, but the issue can be replicated by pasting
// the following code into the JS Console.
var scriptPath = 'http://mywebserver.localhost/application/invalid.js';
jQuery.ajax( {
async: false,
type: 'GET',
url: scriptPath,
crossOrigin: false,
data: null,
global: false,
cache: true,
success: function() {
debugger;
// do some stuff
onResult();
},
error: function( jqXHR, textStatus, errorThrown ) {
debugger;
Lib.showNetworkErrorAlert( jqXHR, textStatus, errorThrown );
},
dataType: 'script'
} );
结果是:
错误原因:〜未知〜
错误:语法错误:错误的令牌'<'在:http://mywebserver.localhost/ ........行:1
为了澄清起见,我已经查看了SO问题,但是我发现的问题往往集中在错误原因上。我知道错误“意外的令牌<in ...”是什么,它只是简单的JS试图将目标解析为JS,而是给出了404错误html文件,因此第一个标记的<触发了错误。
我试图找出并理解的是为什么出现此错误而不是指定的常规错误处理程序。至少我会认为将dataType设置为script会使其实现起来稍微好一些,但是这是一个HTML 404错误文件,而不是脚本。
任何帮助和见解非常感谢。
更新:这是Dev Tools的“网络”标签,显示它正在返回404。
事实证明,这实际上是jQuery中的一个错误-而不是我使用不当-早在2018年就已报告,但此修复程序仅指定用于jQuery 4.0.0
。
但是可能还需要一段时间,所以我现在再次报告了该错误,以将其包含在最新版本中,并且管理员之后对此进行了讨论,并决定将其作为修复程序包含在中3.5.0
。
通常,使用该dataType:script
属性告诉jQuery的Ajax函数“我正在提供脚本,请在JavaScript加载后执行。”
问题在于,无论响应状态代码如何,文件(或返回的内容)都将被评估为JavaScript(即使不是JavaScript),如果404错误返回404错误HTML页面,那么这当然会导致错误。
可以在Github上看到解决方案(只是在这里我不做错误解释),但是简单来说,它不应再为失败的HTTP响应执行脚本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句