2014-10-18 24 views
0

我对于连接API和Ajax请求等领域有点新鲜。我正尝试向服务器上的API发送POST ajax调用,但是当我从我的机器发送此错误时出现此错误:简单的解决方案没有'Access-Control-Allow-Origin'标题出现在请求的资源上?

没有“Access-Control-Allow-Origin”标头在请求的资源上。因此不允许访问原产地'http://localhost'。响应的HTTP状态码为405.

但是,如果脚本从托管服务器运行,那么我不会收到此错误。当然,我在这里的许多问题中都会读到这个问题,但由于这么多奇怪的术语我无法理解,所以我无法执行任何解决方案。根据我的理解,我尝试了许多这些解决方案,但他们没有奏效。

建议的解决方案之一是“为响应添加标题”。所以我尝试了这样,但它没有工作:

function ajax_insert(data, success_func, error_func) { 
    $.ajax({ 
     type: "POST", 
     url: the_url, 
     data: data, 
     contentType: 'application/json; charset=UTF-8', 
     dataType: 'json', 
     xhrFields: { 
      withCredentials: true 
     }, 
     success: function(response) { 
      response = HttpResponse(json.dumps('{"status" : "success"}')) 
      response.__setitem__("Content-type", "application/json") 
      response.__setitem__("Access-Control-Allow-Origin", "*") 
      success_func(response) 
     }, 
     error: function(xhr){ 
      error_func(xhr) 
     } 
    }); 

} 

我在这里做错了什么?

+0

*“添加一个头到响应”*,你不能在你的客户端做到这一点在问题中的代码片断似乎尝试前端Javascript的方式。所以你需要删除整个'success:function(response)'块。这对你没有任何帮助。 – sideshowbarker 2017-08-18 17:59:44

+0

*“响应的HTTP状态码为405”*表示您要求的服务器以“方法不允许”响应,这意味着它未配置为允许向请求中的URL发送POST请求,否则它没有配置为允许OPTIONS请求。 – sideshowbarker 2017-08-18 18:03:00

+0

'contentType:application/json;你的代码添加到请求中的charset = UTF-8'头会触发你的浏览器首先自动执行[CORS预检选项请求](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS #Preflighted_requests)。因此,如果您提出请求的服务器未配置为允许OPTIONS请求,则该预检将失败,并且您的浏览器将永远不会发送您尝试发送的实际POST请求。所以底线是,你需要检查服务器以确保它配置了CORS支持。 – sideshowbarker 2017-08-18 18:05:04

回答

0

从另一个域调用web api时,必须设置SERVER以使用正确的标题进行响应。该技术被称为跨源资源共享。谷歌的“CORS”和任何你在服务器上得到的.Net/nodejs/PHP ...

+0

这是一个很好的例子,说明如何在最近使用的.net中实现服务器响应,web api。很棒。 [http://www.asp.net/web-api...](http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) – wojjas 2014-10-26 16:30:38

相关问题