jQuery.ajax -always() 并不总是运行

2024-01-08

我正在使用 jQuery.ajax 进行 REST 调用并检索一些 JSON。它按预期工作。但是,当我强制出现错误条件(例如无效 URL)时,always 方法不会触发。如果我设置 crossDomain=false 或 dataType='json',那么总是会触发。但是,我无法在我的生产代码中做到这一点。如果你设置 url='http://ip.jsontest.com/ http://ip.jsontest.com/' 然后总是会开火。我创建了一个小例子来说明这个问题:

var jqXHR = jQuery.ajax({
    type: 'GET',
    async: false,
    cache: false,
    url: 'http://ip.jsontest.com.BADURL/',
    contentType: 'application/json; charset=UTF-8',
    crossDomain: true,
    dataType: 'jsonp'
})
.done(function (data, textStatus, jqXHR) {
    console.log('Your IP is ' + data.ip);
    console.log('done was called');
})
.fail(function (jqXHR, textStatus, errorThrown) {
    console.log('fail was called');
})
.always(function (dataOrjqXHR, textStatus, jqXHRorErrorThrown) { console.log('always was called'); });

您可以在 jquery.com 的控制台中运行它,该控制台使用 jQuery 1.9.1。我使用 jQuery 1.11.1 有相同的行为。我总是需要触发来处理 url 不可用的情况。我在 IE11、Chrome 38 和 FF 33 中遇到相同的行为。我做错了什么还是这是一个错误? 谢谢。


这是众所周知的 JSONP 调用。根据$.ajax http://api.jquery.com/jQuery.ajax/参考error:

注意:跨域脚本和跨域 JSONP 请求不会调用此处理程序。

另请注意,不支持同步 JSONP 调用:

跨域请求和dataType:“jsonp”请求不支持同步操作。

解决方法通常涉及 1) 设置调用超时或 2) 使用插件添加更典型的error功能。

1)设置超时(和async true)

var jqXHR = jQuery.ajax({
    type: 'GET',
    async: true,
    cache: false,
    url: 'http://ip.jsontest.com.BADURL/',
    contentType: 'application/json; charset=UTF-8',
    crossDomain: true,
    dataType: 'jsonp',
    timeout: 2000
})
.fail(function (jqXHR, textStatus, errorThrown) {
    console.log('fail was called');
})
.done(function (data, textStatus, jqXHR) {
    console.log('Your IP is ' + data.ip);
    console.log('done was called');
})
.always(function (dataOrjqXHR, textStatus, jqXHRorErrorThrown) { console.log('always was called'); });

2) The jQuery JSONP 插件 https://github.com/jaubourg/jquery-jsonp它增加了错误恢复功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery.ajax -always() 并不总是运行 的相关文章

  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • 优化正则表达式以过滤数千个 HTML 选择选项

    背景 我开发了一个基于 jQuery 的穿梭小部件 https stackoverflow com a 13557000 59087对于 HTMLselect元素 因为我找不到一个经过最低限度编码并提供正则表达式过滤器来补偿的元素变音符号
  • Angular 完成渲染后运行 jQuery

    我正在尝试使用 angularjs 中的 json 对象填充个人资料页面 我正在为此使用指令 我有一个配置文件指令 其中包含配置文件部分指令作为子项 配置文件部分具有作为子级的配置文件子部分指令 我需要在 Angular 开始编译之前和 A
  • 提交Ajax表单后如何用消息更新_Layout.cshtml中的DIV?

    目前我有一把剃须刀View像这样 TotalPaymentsByMonthYear cshtml model MyApp Web ViewModels MyViewModel using Ajax BeginForm TotalPaymen
  • POST 表单数据为 application/json

    我正在开发一个 API 它接收 application json post 请求 并触发一些流程 我目前的主要问题是发送一个 application json 帖子 其中包含来自输 入表单的数据 我已经尝试过 jQuery ajax 但由于
  • Bootstrap:使用单个选项卡导航控制多个选项卡面板

    我想用一个选项卡导航来控制两个不同的选项卡内容 在 Bootstrap 3 中 我有一个使用逗号分隔数据目标的解决方案 如本例所示 https stackoverflow com a 19719859 1788961 https stack
  • Magento 中的 jquery/prototype 冲突

    这是一个基于 Themeforest 的 Acumen 主题的 Magento 商店 出乎意料的是 jquery 的东西现在不起作用了 Acumen 通过 magento 静态块加载 jquery 但这些都没有被触及 昨天我正在努力添加 j
  • jQuery 日期选择器 - 时区问题

    我们在网站上使用 jQuery 日期选择器来选择预订的日期和时间 日历当前设置为太平洋标准时间 当用户尝试从其他时区访问时 这会导致错误 我们是否应该将服务器设置为 UTC 并让应用程序根据用户的 IP 地址自动选择用户的时区 我很好奇我们
  • JavaScript:参数列表后缺少 )

    这个 JavaScript 产生一个错误 参数列表后缺少 在 firebug 中使用代码 我究竟做错了什么 功能d缺少左括号 answer after 不应该逃避 只需常规报价即可
  • 根据通过 AJAX 请求的用户输入重绘 google 图表

    我有一个谷歌图表从我的数据库中提取数据 它可以按我想要的方式工作 根据 URL 中的 get 请求 它从所选表中提取数据 我想根据下拉菜单中选定的表通过 ajax 更新此图表 我无法突破的部分是通过 ajax 获取数据响应 我认为下面的代码
  • 使用 jQuery 拖放

    我想使用 jQuery 进行简单的拖放操作 到目前为止我还没有做任何事情 但之前的尝试都没有成功 你有没有尝试过jQuery UI 可拖动 http jqueryui com demos draggable 简单用例 div class u
  • 使用 jQuery 值更新 Angular 模型

    您好 我有一个附加在我的模型上的输入字段 当用户手动输入该字段时 会在更改时调用一个函数 这工作正常 并且模型按预期在控制台日志中反映
  • jquery:如何检查div中的所有单选按钮是否被选中

    我的 html 看起来像这样 div div
  • 如何使用javascript隐藏div

    我想使用 Javascript 隐藏一个 div 下面是我的div div class ui dialog titlebar ui widget header ui corner all ui helper clearfix span cl
  • 设置股票数据 Highcharts xAxis 的格式

    我已经浏览了需要为 xAxis 属性设置的 Highcharts 选项来格式化时间标签 但没有运气了解这对于这种情况到底是如何工作的 我在白天 盘中 检索了股票的动态数据 我需要显示这些数据 因为检索的数据每天从 9 30 开始到 17 0
  • jQuery 1.6:backgroundPosition 与 backgroundPositionX 和 FF4 兼容性

    在尝试升级 jQuery 插件 iCheckbox http stackoverflow com questions 6032538 以在 jQuery 1 4 4 之上工作时 我发现使用 animate backgroundPositio
  • 本地 401 工作,临时服务器得到 302

    我可能不会获得帮助第一次尝试所需的所有信息 但我会尽我所能 并在我们进行过程中对其进行编辑 我有一个使用 Spring Security Core 插件的 Grails 1 3 7 应用程序 我正在编写处理会话超时和 ajax 请求的代码
  • 使用jquery和coldfusion cffile上传多个文件

    不是一个真正的问题 只是想将其发布在某个地方 因为我在其他地方找不到它 现在我已经拼凑了一个工作演示 我想我会分享 这在 Coldfusion 和 Railo CFML 服务器上同样有 效 问题是 对于 CFML 开发人员来说 CFFILE
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • 当 p:ajax event=change 时,如何禁用 selectOneMenu 上所需的标记?

    这是我的配置 PrimeFaces 4 0 4 精英 OmniFaces 1 6 3 JSF MyFaces 2 0 2 服务器 WebSphere 8 5 0 2 一些代码 为了更清楚我只发布相关部分

随机推荐

  • PHP 类型转换

    我想知道将值从一种类型转换为另一种类型的最佳方法是什么 我们应该使用哪种变体 intval value settype value int int value 它们都产生相同的结果 int value 与以下相比节省一个函数调用intval
  • Android 通话应用程序未重置音频流

    我设置了一个活动应用程序来使用自我管理连接服务 因为我们正在使用音频和视频并且希望能够利用该系统 然而 我们关闭连接或更改音频流的方式导致了一个问题 我将在此尽力描述该问题 当我开始应用程序的通话时 一切都按我们希望的方式工作 它以免提电话
  • 找不到关键字参数 '{'pk': ''}' 的反向 'plan_edit'。尝试了 1 个模式:['palan/edit$']

    我收到以下错误 找不到关键字参数 pk 的反向 plan edit 尝试了 1 个模式 palan edit 有谁知道如何解决它 urls py urlpatterns url r views post list name post lis
  • Android Studio - 检查代码 - 排除生成的文件

    有什么办法 如何排除 android 生成的文件 或手动指定排除的文件夹 分析 gt 检查代码 使用自定义范围 单击 分析 gt 检查代码 后 在 指定检查范围 对话框中 单击 自定义范围 后的 定义一个新的范围 递归包含Android a
  • 什么时候应该使用实体框架?

    我是实体框架的新手 当然 我在 SOF 上发现了一些关于目标用例的问题 让我给你一些信息 我不与不同的数据库供应商或不同的数据库打交道 一台 而且只有一台 SQL Server 2008 数据库的表少于 30 个 我真的需要重做事情并使用实
  • Multer 文件缓冲区丢失

    从以下返回的 req file 属性不包含缓冲区属性 https www npmjs com package multer https www npmjs com package multer 因此 当我尝试访问 req file buff
  • 使用 Android AccountManager 获取 gdata 的 authtoken

    所以我试图同步到谷歌文档 而不必询问用户的凭据 我使用此代码来获取身份验证令牌 AccountManager mgr AccountManager get activity authToken mgr blockingGetAuthToke
  • Mac 上的 JFileChooser 看不到中文字符命名的文件?

    该程序在Intellij中运行时运行良好 可以看到中文命名的文件 我将其构建到 jar 文件中 执行了 jar 和JFileChooser无法看到那些文件 我在 Windows 中尝试了该 jar 它工作得很好 这个文件在 Mac OS X
  • PDO——真实的事实和最佳实践? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过 HTML 代码在 UIView 中使用透明背景色

    我正在尝试在 UIView 中显示广告 我需要将背景颜色设置为透明 我尝试使用 viewObject setBackgroundColor UIColor clearcolor 尽管它使 UIView 透明 但它显示白色背景 下面是我尝试过
  • 当 QProcess 需要用户输入 Qt 时如何读取

    我使用 Qt 来实现一个允许开发嵌入式系统的接口 我面临一个问题 为了将程序闪存到嵌入式系统中 我使用 QProcess 以便使用命令 make 和 make flash 保证没有任何问题 程序编译成功 但是当我尝试对 make flash
  • Overlay.draw() 调用多次

    我有一个关于draw 的方法OverlayAndroid 地图中的类 移动地图时的方法draw 接到几次电话 从 4 次到 13 次 这对我来说是个问题 因为这个方法必须用 70000 点重新绘制我的路线 这是很多资源 我找不到这个问题的描
  • .NET 垃圾收集器之谜

    在我的工作中 我们遇到了 OutOfMemoryExceptions 问题 我编写了一段简单的代码来模仿某些行为 最终得到了以下谜团 看看这段简单的代码 当内存不足时 它就会崩溃 class Program private static v
  • 高分子纸波纹

    我试图在按下按钮时更改元素的颜色 我希望当按下按钮并且颜色发生变化时在该元素中触发纸张波纹效果 我该怎么做呢 目标元素
  • 充当文件上传的div?

    我只是想上传或浏览 div 本身 就像作为文件输入并触发其功能 但我的问题是我对 java 脚本很陌生 并且为自己集思广益近一个小时并寻找互联网上同样的问题 所以我别无选择只能在这里提问 my code div style border 1
  • Android AsyncTask 与进度对话框取消

    在我的android应用程序中 我使用带有进度对话框的AsyncTask 请等待登录 来使用我的网页 异步任务内的Web服务功能 登录用户 当用户单击设备上的 后退 按钮时 我想关闭进度对话框并取消 AsynTask 我找不到用于中断 As
  • Swift - 从 JSON 响应创建数据模型

    我正在学习 Swift 语言 很高兴听到其他人输入的内容之一是 如何处理来自 JSON 响应的模型 例如 I have User swift model class User NSObject var user token String v
  • 自动分配spring的bean名称以防止名称冲突?

    在Spring应用程序中 如果两个程序员开发两个包 将 Repository注释为相同的类名 Spring将抛出 IllegalStateException 注解指定的bean名称 mybean 代表 bean 类 foobar packa
  • 如何从 URL 方案中获取参数。

    我在我的 iPhone 应用程序中使用 URL 方案 从一个页面将用户切换到 safari 然后从网页单击一个按钮 我将恢复到应用程序 此时 一些参数是由网页传递的 例如 myapp parameter 1 如何从我的应用程序中找到此参数
  • jQuery.ajax -always() 并不总是运行

    我正在使用 jQuery ajax 进行 REST 调用并检索一些 JSON 它按预期工作 但是 当我强制出现错误条件 例如无效 URL 时 always 方法不会触发 如果我设置 crossDomain false 或 dataType