Ajax 错误回调未针对 iPhone 触发

Posted

技术标签:

【中文标题】Ajax 错误回调未针对 iPhone 触发【英文标题】:Ajax Error callback not firing for iPhone 【发布时间】:2016-06-04 05:28:16 【问题描述】:

如果发送异步请求但成功则错误回调不起作用!它在 android 和浏览器中运行良好。 在 iPhone 中,它适用于同步请求。这是我的代码。 其他 api 工作得很好。

$.ajax(
        type: 'POST',
        url: "https://api.cloud.appcelerator.com/v1/users/login.json?key=xxxxxxxxx",
        data: 
            "login": useremail,
            "password": password
        ,
        success: function (resp)                                                
            console.log(resp);
            console.log('User logged-in successfully');               
        ,
        error: function (e) 
            console.log(e)
        
    );

API 返回状态码 200 表示正确的电子邮件和密码,但返回 401 表示不正确的状态码,因此如果状态码为 200,则它运行良好,我会成功获得响应。

【问题讨论】:

我怀疑问题可能出在对 HTTPS URL 的 ajax 调用中。当从 ios 设备触发 ajax 调用时,您确定调用正在到达服务器端吗? @Gandhi 谢谢!但它必须到达服务器,因为成功回调适用于 iPhone 设备。 在这种情况下,您如何准确地从服务器端抛出错误以期望它被错误回调捕获? @Gandhi 我不认为我理解这个问题,但我无法控制服务器,它基于云的后端作为服务平台,它在 Android、浏览器和邮递员中运行良好,这个完全相同的代码适用于 android 和浏览器 400 状态码表示请求格式错误。也就是说,客户端向服务器发送的数据流不符合规则。所以我相信在这种情况下你不会得到成功或错误回调。 【参考方案1】:

这似乎是 Cordova + iOS + jQuery 组合的一个非常常见的问题。

似乎解决此 401 错误响应处理问题的方法很少。一种是在发出 AJAX 请求和处理错误时添加超时超时属性。另一种方法是在服务器端通过 HTTPS 发送请求并在 401 错误的情况下返回带有错误详细信息的身份验证令牌来处理它。

请求您查看此post 了解更多信息。

此外,目前您无法区分 iOS 中的这两个错误(401 和 408 错误),因为我可以在官方 Apache Cordova 错误跟踪系统中看到此缺陷仍然存在。请求您查看此bug

【讨论】:

以上是关于Ajax 错误回调未针对 iPhone 触发的主要内容,如果未能解决你的问题,请参考以下文章

AJAX:仅触发错误回调

未捕获的引用错误:未定义回调

iPhone:SKPaymentQueue addPayment 啥时候触发了 applicationWillResignActive 回调?

Firebase“设置”完成回调未触发

未使用 CoreBluetooth (iPhone 6) 接收外围设备发现回调

回调中未触发回流/布局?