将 JSON 数据发布到返回状态代码 0 的 API
Posted
技术标签:
【中文标题】将 JSON 数据发布到返回状态代码 0 的 API【英文标题】:Posting JSON data to an API returning status code 0 【发布时间】:2016-01-24 08:26:40 【问题描述】:我正在尝试将 json 数据发送到 API,但它返回状态代码 0。我在控制台中收到此错误消息:“跨源请求被阻止:同源策略不允许在 asm-resumator 读取远程资源.azurewebsites.net/resumes。(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。”
您能否指出我的以下代码有什么问题或遗漏:
var candidate= name :"Wedad",email:"myemail", phoneNumber:"1234567", resume:"myresume"
;
$.ajax(
type: "POST",
data :JSON.stringify(candidate),
url: "url",
dataType: 'json',
success: function (data)
alert(data);
,
error: function (jqXHR, exception)
var msg = '';
if (jqXHR.status === 0)
msg = 'Not connect.\n Verify Network.';
else if (jqXHR.status == 404)
msg = 'Requested page not found. [404]';
else if (jqXHR.status == 500)
msg = 'Internal Server Error [500].';
else if (exception === 'parsererror')
msg = 'Requested JSON parse failed.';
else if (exception === 'timeout')
msg = 'Time out error.';
else if (exception === 'abort')
msg = 'Ajax request aborted.';
else
msg = 'Uncaught Error.\n' + jqXHR.responseText;
alert(msg);
);
【问题讨论】:
控制台是否显示错误? ***.com/a/2016085/1541563 jQuery Ajax - Status Code 0?的可能重复 【参考方案1】:没有 HTTP 状态代码 0。您看到的是您正在使用的 API/库返回的 0。您将不得不为此检查文档。 Source
【讨论】:
【参考方案2】:正如this article 详细解释的那样,当您从与页面不同的域请求资源时,会发出 CORS(http 访问控制的跨域共享标准)请求。
出于安全原因,浏览器会限制从脚本中发起的跨域 HTTP 请求。
现代浏览器处理跨域共享的客户端组件,包括标头和策略实施。但是这个新标准意味着服务器必须处理新的请求和响应标头。
现在,假设服务器有正确的跨域头,jQuery ajax 有一个option 来设置请求中正确的头:
如果您希望在同一域上强制执行跨域请求(例如 JSONP),请将
crossDomain
的值设置为 true。
那么,试试吧:
$.ajax(
type: "POST",
crossDomain: true, // <= here
data: candidate, // no need to stringify the data, jquery does it for you
url: url,
success: function(data)
alert(data);
,
error: function(error)
console.log(error);
);
如果错误仍然存在,可能是服务器没有遵循CORS标准,所以没有解决办法。
更多示例和阅读:http://zinoui.com/blog/cross-domain-ajax-request
只是为了了解一下,Chrome 和其他浏览器通常会执行飞行前请求。简而言之,他们向服务器发送第一个请求,以了解跨源请求允许使用哪种方法。
【讨论】:
对不起。我忘了提到我在控制台中收到此错误消息:“跨域请求被阻止:同源策略不允许读取asm-resumator.azurewebsites.net/resumes 的远程资源。(原因:CORS 标头 'Access-Control-Allow-Origin' 缺失)。” asm-resumator.azurewebsites.net/resumes:找不到 404。你能给我你使用的确切网址吗? 这是我使用的确切网址asm-resumator.azurewebsites.net/resumes。我添加了 crossDomain: true,但我仍然收到相同的错误消息“跨域请求被阻止:同源策略不允许读取asm-resumator.azurewebsites.net/resumes 的远程资源。(原因:CORS 标头 'Access-Control-Allow-Origin' 缺失)。”那么这意味着另一端的服务器没有遵循CORS标准? 是的,好像是这样。所以基本上,你什么都做不了。奇怪的是,我在关注这个网址时找不到 404 ... 我也一样。我会回复给我网址的人。谢谢!【参考方案3】:您可以使用 html 表单轻松发送。
<form enctype="application/json" action="url" method="post">
<input name="name">
<input name="email">
<input name="phoneNumber">
<input name="resume">
<input type="submit" name="send" value="Send">
</form>
【讨论】:
以上是关于将 JSON 数据发布到返回状态代码 0 的 API的主要内容,如果未能解决你的问题,请参考以下文章
将检索到的对象推送到 React 中的状态只会给我带来最后一个