Javascript jQuery跨域后欺骗
我正在尝试对一个API进行身份验证,该API只允许您使用带有JSON作为表单数据的POST进行身份验证,格式为{“username”:“myusername”,“password”:“mypassword”} 我已经花了两天的时间试图用jQuery实现这个功能,但是我遇到了问题,因为它是跨域的。我怎样才能做到这一点 错误消息:Javascript jQuery跨域后欺骗,javascript,jquery,json,post,cross-domain,Javascript,Jquery,Json,Post,Cross Domain,我正在尝试对一个API进行身份验证,该API只允许您使用带有JSON作为表单数据的POST进行身份验证,格式为{“username”:“myusername”,“password”:“mypassword”} 我已经花了两天的时间试图用jQuery实现这个功能,但是我遇到了问题,因为它是跨域的。我怎样才能做到这一点 错误消息: Request Method:OPTIONS Status Code:405 METHOD NOT ALLOWED 迄今为止的代码: var username = "m
Request Method:OPTIONS
Status Code:405 METHOD NOT ALLOWED
迄今为止的代码:
var username = "myusername";
var password = "mypass"
var authurl = "https://myurl";
$.ajax
({
type: "POST",
url: authurl,
dataType: 'json',
contentType: "application/json; charset=utf-8",
async: false,
data: {'json':'{"username":"' + username + '", "password":"' + password + '"}'},
success: function (result) {
$('#json').html(result);
}
})
总结如下:
- API只接受POST进行身份验证
- API需要json作为表单数据,例如:{“用户名”:“我的用户名”,“密码”:“我的密码”}
- js从其他域运行,导致跨域错误
非常感谢您的帮助:)您应该遵循不同的模式。本地JS将向本地URL发送ajax post,该URL将使用json数据接受post方法
此时,您的服务器代码将使用正确的数据向远程服务器发送HTTP POST,获取响应,并将其发送回调用的js。供跨域使用(搜索跨域)
问题在于,您试图发布到的域没有响应在每次跨域请求之前发送的选项请求。通过选项请求,浏览器接收有关跨域规则等的信息。要启用跨域请求,服务器必须设置
访问控制允许来源:
(实际上是脚本的域,但*涵盖了所有内容)以及访问控制允许方法:GET、POST、,选项
标题。我在GoDaddy上有一个共享主机。我也需要这个问题的答案,在四处搜索之后,我发现这是可能的
我写了一个.htaccess文件,把它放在与我的操作页面相同的文件夹中。以下是.htaccess文件的内容:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
以下是我的ajax调用:
$.ajax({
url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php', //server script to process data
type: 'POST',
xhr: function() { // custom xhr
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
}
return myXhr;
},
//Ajax events
beforeSend: beforeSendHandler,
success: completeHandler,
error: errorHandler,
// Form data
data: formData,
//Options to tell JQuery not to process data or worry about content-type
cache: false,
contentType: false,
processData: false
});
参考本文:
您是否有权访问服务器,或者它是某种您无法修改的预定义API?感谢Matteo,我通过修改指向另一台服务器的路径解决了这一问题,这很有效:)工作完美,与YQL和JSONP相比,此解决方案是最好的。。。由于您的服务器在您的控制之下,您可以轻松地将访问控制允许源添加到您的服务器。谢谢Matteo@MatteoMosca我不确定这篇文章是不是死了,但我真的很感谢你对答案的解释。如何使服务器向远程服务器发送HTTP POST?这取决于您使用的服务器端技术。例如,在.NETC#中,您可以使用WebRequest或WebClient类。你可以找到很多关于这方面的文档,只需谷歌就可以了。如果jquery请求是从某个应用程序发送的,比如android应用程序,webview执行jquery会怎么样。是否在客户端(发送方)或服务器端(接收方)添加.htaccess?是否添加.htaccess服务器端