将JSON数据发布到返回状态码0

时间:2016-01-24 08:26:41

标签: jquery json api

我正在尝试将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);
}
        });

3 个答案:

答案 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和其他浏览器通常会执行飞行前请求。简而言之,他们向服务器发送第一个请求,以了解跨源请求允许哪种方法。 cors preflight request

答案 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>