我正在尝试对API进行身份验证,该API仅允许您使用JSON作为表单数据的POST以格式进行身份验证
{"username":"myusername","password":"mypassword"}
三天来,我一直在尝试使用jQuery,但我遇到了问题,因为它是跨域的。我怎样才能做到这一点?
错误消息:
"NetworkError: 405 Method Not Allowed
我的代码:
var username = "myusername";
var password = "mypass"
var authurl = "https://myurl";
$.ajax
({
type: "POST",
url: authurl,
dataType: 'json',
contentType: "application/json",
async: false,
data: {'json':'{"username":"' + username + '", "password":"' + password + '"}'},
success: function (result) {
$('#json').html(result);
}
})
我也有同样的问题,但我使用了dataType:jsonp
,它对我有效。以下是jQuery文档了解更多详细信息
$.ajax
({
type: "POST",
url: authurl,
dataType: 'jsonp',
context: document.body,
async: false,
data: {'json':'{"username":"' + username + '", "password":"' + password + '"}'},
success: function (result) {
$('#json').html(result);
}
})
由于同源策略,通常不可能对另一个域执行异步POST请求。
JSONP之所以有效,是因为您可以将<script>
标记插入到DOM中,并且它们可以指向任何位置,并且不使用XMLHttpRequest(ajax)。
如果您尝试使用的API支持JSONP,这将是一种选择,否则您可能需要研究一种解决方案,使用PHP发布类似Curl的数据,然后使用Ajax在您自己的服务器等上调用该PHP脚本。