看来,当您从浏览器中的脚本创建XMLHttpRequest时,如果浏览器设置为脱机工作或者拔出网络电缆,请求将以错误完成并且状态为0. 0未列为允许HTTP状态代码.
状态代码0是什么意思?所有浏览器和所有HTTP客户端实用程序的含义是否相同?它是HTTP规范的一部分还是其他协议规范的一部分?这似乎意味着根本无法进行HTTP请求,可能是因为服务器地址无法解析.
显示用户的错误消息是什么?"要么您没有连接到互联网,要么网站遇到问题,或者地址中可能存在输入错误"?
我应该补充一点,当我设置为"脱机工作"时,我会看到FireFox中的行为,但是当设置为"脱机工作"时,我看不到Microsoft Internet Explorer中的行为.在IE中,用户获得一个对话框,提供上线选项.FireFox在返回错误之前不会通知用户.
我问这是为了回应"显示更好的错误消息"的请求.Internet Explorer的功能很好.它告诉用户导致问题的原因并为他们提供修复问题的选项.为了给FireFox提供一个等效的UX,我需要推断出问题的原因并通知用户.那么总共可以从状态0推断出什么呢?它有普遍意义还是什么都没告诉我?
我正在开发一个iOS项目.
在此应用程序中,我正在从服务器下载图像.
问题:
在下载图像时,我收到请求超时.根据文档HTTP请求超时的状态代码是408.
但在我的应用程序中,我收到HTTP状态代码0,出现以下错误
错误域= NSURLErrorDomain代码= -1001"请求超时." UserInfo = 0xb9af710 {NSErrorFailingURLStringKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg,NSErrorFailingURLKey = http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg,NSLocalizedDescription =请求超时.,NSUnderlyingError = 0x13846870"请求超时."}
在搜索期间,通过互联网,我找不到有关HTTP状态代码0的信息.
任何人都可以向我解释这个吗?
情况:
我正在开发一个从API接收数据的Ionic应用程序.
之前,API在http://地址上,一切正常.
然后我们将API移动到https://并且它不再起作用了.或者,它仍然可以在浏览器中访问它,但不能在手机(或模拟器)中访问它.
我不确定可能是什么问题.在控制台日志中,我看到请求的状态为0.
它可能与白名单,标题或CORS有关.我尝试了几种方法但没有效果.
白名单:
在config.xml之前有这个白名单:
<allow-navigation href="http://*/*" />
Run Code Online (Sandbox Code Playgroud)
我曾尝试以多种方式修改它,但这并没有解决问题.例如,我尝试过:
<allow-navigation href="https://*/*" />
Run Code Online (Sandbox Code Playgroud)
和
<allow-navigation href="*" />
Run Code Online (Sandbox Code Playgroud)
API请求:
这是API请求的一个示例:
$http.get( 'https://MY_DOMAIN.com/mobile/list_mobile_project/' ,{},{"headers" : {"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" }})
.success(function(data, status, headers, config)
{
// code
}).
error(function(data, status, headers, config)
{
console.log('Error with the API list_mobile_project');
console.log(data);
console.log(status);
console.log(headers);
console.log(config);
});
Run Code Online (Sandbox Code Playgroud)
API响应:
这是API响应的一个例子:
public function list_mobile_project()
{
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
// code
echo json_encode( $project_list );
}
Run Code Online (Sandbox Code Playgroud)
问题:
如何让API在HTTPS上运行?
如果是与CORS相关的问题,如何在服务器端启用它?
我们的Web应用程序中的一个页面使用jQuery的ajax()方法大约每10秒轮询一次服务器以获取新数据.我们通常有几百名用户同时查看此页面,因此我们的服务器每秒会收到多个请求.负载不是任何问题.
对于我们访问者中的一小部分,jQuery ajax()调用会偶尔触发它的错误事件.大多数这些错误事件都是明显的错误(例如访问者遇到网络问题时超时),但是这些错误中的一小部分我很难找到原因,而且我有点困惑.
我们正在连接一个像这样的全局错误监听器
$.ajaxSetup({
timeout: oursettings.timeout,
error: function(xhr, status, e){
// error handling goes here
}
});
Run Code Online (Sandbox Code Playgroud)
对于这个特定的错误子集,jQuery给我们带来了status一些"error".通过jQuery源代码(特别是第3574行)读取错误仅在XmlHttpRequest readystate具有值4(意味着它DONE)并且HTTP响应状态超出成功值(< 200或>= 300)时使用此值抛出.
但是,当我们检查XmlHttpRequest对象本身时,我们发现它的(HTTP响应)状态为0.根据XHR规范,当"错误标志为真"时,应设置状态0 .
这是我真的很困惑的地方,因为XmlHttpRequest规范中关于"错误标志" 的唯一其他事情是
DONE状态具有相关的错误标志,指示某种类型的网络错误或堕胎.它可以是true或false,初始值为false.
规范没有说明保留这个错误标志的属性或位置(即,它是否可用xhr.error?).
所以我想我的问题归结为:这将是正确的我们的Ajax的错误处理代码假设击中我们的错误处理程序与jQuery的状态的任何事件"error"和xhr.status的0,以引起仅通过"网络错误或流产"?
是否有任何其他条件或任何其他人看到的可能导致XmlHttpRequest readystate DONE (4)的HTTP响应状态为0?我希望能够排除服务器端错误的任何可能性(因为我们的服务器端日志没有显示任何内容),并且要更改错误处理逻辑以不将此方案视为致命错误(这导致用户看到一堆大红色警报类型错误消息).
我在使用 angular 4 的 HttpClient get 方法时遇到了一个奇怪的问题。
有一些从后端返回的自定义错误消息,我应该处理并显示给用户。但是我在控制台中得到了 HttpErrorResponse
HttpErrorResponse:
error: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0,
total: 0, type: "error", …}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers:
Map(0)}
message: "Http failure response for (unknown url): 0 Unknown Error"
name: "HttpErrorResponse"
ok: false
status: 0
statusText: "Unknown Error"
url: null
Run Code Online (Sandbox Code Playgroud)
我在这里读到了这个问题,但没有一个解决方案对我有帮助。在浏览器的网络选项卡中,我能够观察到来自服务器的真实响应:
"{\"StatusCode\":400,
\"ExceptionMessage\":\"Internal Server Error\",
\"Error\":\"Internal Server Error\",
\"Errors\":
[{\"Code\":\"ValidationError\",\"Message\":\"Custom message here.\"}]}"
Run Code Online (Sandbox Code Playgroud)
该请求在网络选项卡中如下所示:
General:
Request URL: https://asdfhost:port/5c77a77101ae8643aeeb61e9
Request Method: GET
Status Code: 400
Remote …Run Code Online (Sandbox Code Playgroud) 所以我终于再次尝试了AJAX(而不是隐藏的iframe),我现在还记得为什么我一开始就非常讨厌AJAX.
这是一个简单的脚本,可以向服务器查询用户收到的私人消息的数量.服务器以单个数字响应,脚本更新指示器并设置超时五秒钟以再次查询.
在极少数情况下(通常当我去AFK一段时间),我开始获得最奇怪的HTTP状态代码.
在Chrome上:"AJAX请求无法检索/ajax/network.php,HTTP状态0"
在IE上:"AJAX请求无法检索/ajax/network.php,HTTP状态12029"
这些代码都不是有效的.这里发生了什么,我怎么能阻止它发生?