【问题标题】:Ajax request to restful api from different domainAjax 请求来自不同域的 restful api
【发布时间】:2018-11-05 14:38:48
【问题描述】:

我有一个宁静的 api,当我从邮递员那里打电话时,它可以正常工作。在邮递员上,我提供以下配置以获得答案: -POST:“https://www.example.net/API/MyFunction” 我没有授权。 -标题: 内容类型:应用程序/json, 用户名:我的用户名, 密码:我的密码 -身体 生的

{"firstparameter":"firtparameter_value"}

我有一个纯 html 域,我想在其中进行一些调用并从该 api 提供数据。所以我添加了一个指向 jquery-3.3.1.js 的链接并创建了一个 ajax 调用。我尝试遵循本指南https://www.html5rocks.com/en/tutorials/cors/,但是当我运行呼叫时,我收到以下错误。 Ajax 调用:

 var username = 'myusername';
 var password = 'mypassword';
$.ajax({

    type: 'POST',
    dataType: "jsonp",

    url: 'https://www.example.net/API/MyFunction',


    contentType: 'text/plain',
    crossDomain: true,
    data:{"firstparameter":"firtparameter_value"},
    xhrFields: {

        withCredentials: false
    },

    headers: {


        username: username,
        password: password
    },

    success: function () {


    error: function () {

    }
});

我得到的错误是:

获取 https://www.example.net/API/MyFunction/?callback=jQuery33104247946565223606_1541427224545&firstparameter=firtparameter_value&_=1541427224546 net::ERR_ABORTED 405(不允许的方法)

【问题讨论】:

  • 是否有理由需要将 dataType 设置为 jsonp 而不是 json

标签: javascript jquery json ajax


【解决方案1】:
type: 'POST',
dataType: "jsonp",

JSONP 请求通过注入发出 GET 请求的<script src> 元素来工作。使用 JSONP 时,jQuery 会忽略方法属性。

不能使用 JSONP 发出 POST 请求。

REST API 不太可能返回 JSONP(在我们有 CORS 之前的糟糕旧时代,这是一种解决同源策略的技巧——而且,像 CORS 一样,它必须在 上设置服务器)。您的 API 肯定不会,因为它告诉您不允许使用 GET 方法(JSONP 必需)。

dataType设置正确的值。


您还有一些其他问题,但与错误消息无关。

你说的是“-Headers: Content-Type : application/json”,但在 JS 中却是“contentType: 'text/plain'”——使用正确的内容类型。

您说的是“data:{"firstparameter":"firtparameter_value"}”,但 jQuery 会将其编码为 URL 格式而不是 JSON 格式。您需要使用 JSON.stringify 将其显式编码为 JSON。

【讨论】:

  • 当我注意到jsonp 标头时,这就是我想知道的。个人欣赏发音。
  • 我已经编辑了我的 json 调用并输入了以下值:type: 'POST', dataType: "json", contentType: 'application/json',data:JSON.stringify({"firstparameter" :"firtparameter_value"}) 并且我收到两个错误 1)405(不允许的方法)和 2) 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有 'Access-Control-Allow-Origin ' 请求的资源上存在标头。
  • @user2340890 第二个可能表明您尚未将服务器设置为允许 CORS 请求。很难知道,没有看到API服务器代码
  • @user2340890 — 所以现在您正在发出一个被拒绝的预检 OPTIONS 请求。这样你问的问题就解决了,this link from my answer 覆盖了你的新问题
【解决方案2】:

每当您尝试使用错误的方法调用 API 函数时都会发生该错误,例如使用 Get Ajax 调用调用 POST 函数。

您需要确保您的后端具有您从 ajax 调用的 POST 方法

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2011-06-08
    • 1970-01-01
    • 2010-09-24
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多