我有一个宁静的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(不允许使用方法)
答案 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调用的方法