Ajax请求来自不同域的Restful API

时间:2018-11-05 14:38:49

标签: javascript jquery json ajax

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

{"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(不允许使用方法)

2 个答案:

答案 0 :(得分:1)

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

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

无法使用JSONP发出POST请求。

REST API不太可能返回JSONP(在我们遇到CORS之前的糟糕年代,这是一种用于解决相同来源策略的黑客,并且像CORS一样,必须在< em> server )。您的API当然不会,因为它告诉您不允许使用GET方法(JSONP必需)。

dataType设置正确的值。


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

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

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

答案 1 :(得分:0)

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

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