如何构建非跨域的 AJAX API?

Posted

技术标签:

【中文标题】如何构建非跨域的 AJAX API?【英文标题】:How to build an AJAX API that is not cross domain? 【发布时间】:2017-07-28 01:10:50 【问题描述】:

我正在构建一个 AJAX API,并且一直收到 405 错误(可能是因为我正在尝试发出跨域请求。

var API = function() 


    API.AddToCart = function(item_id) 
        $.ajax(
            type: "POST",
            url: "/add-cart-item/" + item_id,
            success: function()
            
        );
    
;

我不明白是什么让这个跨域,以及如何不发出跨域请求。有人可以帮我解释一下这个概念吗?

【问题讨论】:

【参考方案1】:

仅仅因为您收到 405 并不一定意味着您有 CORS 问题。您确定服务器端的该方法允许使用 POST 方法吗?

【讨论】:

@JacobHenning 有时这是一个 CORS 问题,但是,如果您不发布跨域,通常是因为该方法只允许某些类型的请求,例如 GET 而不是 POST。通过使用 [HttpGet] 和 [HttpPost] 属性装饰您的控制器方法,您明确地只允许这些类型的请求。如果你想限制 PUT 或 DELETE 或其他类型的请求,你也可以组合它们 [HttpGet, HttpPost]【参考方案2】:

您的服务器似乎不支持该端点的 POST 方法。更多解释请查看https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405。

【讨论】:

太棒了,我不知道你是怎么想出来的。我试图通过在“GET”请求中从 URL 中提取数据来做一些奇怪的事情。我真的不明白 AJAX 能够将数据发送到 URL。您可能已经注意到我的 AJAX 请求中没有“数据:*”部分。你知道解释这个概念的链接或网站吗? 如果您想了解更多和了解 AJAX 的核心概念,请查看此链接AJAX - MDN

以上是关于如何构建非跨域的 AJAX API?的主要内容,如果未能解决你的问题,请参考以下文章

IE 中的 HTTPS Ajax 请求问题(非跨域)

ajax跨域问题简单解决--

处理跨域的方式

如何解决IE8下Ajax调用时跨域的问题

使用 RESTful 服务保护跨域的 API 调用

跨域的简介与解决方案