我正在尝试将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);
}
});
答案 0 :(得分:2)
没有HTTP状态代码0.您看到的是您正在使用的API /库返回的0。您必须检查文档。 Source
答案 1 :(得分:1)
正如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和其他浏览器通常会执行飞行前请求。简而言之,他们向服务器发送第一个请求,以了解跨源请求允许哪种方法。
答案 2 :(得分:0)
您可以使用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>