Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery跨域后欺骗_Javascript_Jquery_Json_Post_Cross Domain - Fatal编程技术网

Javascript 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

我正在尝试对一个API进行身份验证,该API只允许您使用带有JSON作为表单数据的POST进行身份验证,格式为{“username”:“myusername”,“password”:“mypassword”}

我已经花了两天的时间试图用jQuery实现这个功能,但是我遇到了问题,因为它是跨域的。我怎样才能做到这一点

错误消息:

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服务器端