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
Javascript 本地主机和put方法的CORS问题_Javascript_Jquery_Api_Http Status Code 502 - Fatal编程技术网

Javascript 本地主机和put方法的CORS问题

Javascript 本地主机和put方法的CORS问题,javascript,jquery,api,http-status-code-502,Javascript,Jquery,Api,Http Status Code 502,我正在尝试发出CORS请求,以便在位于两个不同域中的客户端和服务器之间进行通信 服务器标头已设置为以下值- 访问控制允许标头:内容类型、授权、内容长度、X-Requested-With 访问控制允许方法:获取、放置、发布、删除、选项 访问控制允许来源:* 如果我点击服务器url,我可以看到响应头 现在,当我使用jquery将数据和方法发送到服务器以进行处理并返回数据时,我得到以下结果 加载失败http://server.com/event/live: 请求的资源上不存在“Access Contr

我正在尝试发出CORS请求,以便在位于两个不同域中的客户端和服务器之间进行通信

服务器标头已设置为以下值-

访问控制允许标头:内容类型、授权、内容长度、X-Requested-With 访问控制允许方法:获取、放置、发布、删除、选项 访问控制允许来源:*

如果我点击服务器url,我可以看到响应头

现在,当我使用jquery将数据和方法发送到服务器以进行处理并返回数据时,我得到以下结果

加载失败http://server.com/event/live: 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:3016因此,不允许访问。响应的HTTP状态代码为502

Jquery代码是-

callMyAPI : function(pUrl,pType,pData,callback){
        var apiURL = API_HOST+pUrl;
        jQuery.ajax({
            xhr: function() {
                var xhr = jQuery.ajaxSettings.xhr();
                xhr.upload.onprogress = function(e) {
                    if (typeof callback == "function"){
                        var percentComplete = parseInt((e.loaded / e.total)*100);
                        callback('progress',percentComplete);
                    }   
                };
                xhr.addEventListener("progress", function(e){
                    if (typeof callback == "function"){
                        if (e.lengthComputable) {
                            var percentComplete = parseInt((e.loaded / e.total)*100);
                            callback('progress',percentComplete);
                        }
                    }   
                }, false);
                return xhr;
            },
            url: apiURL,
            data: pData,
            type: pType,
            beforeSend: function(xhr){
               xhr.withCredentials = true;
            },
            crossDomain: true,
            contentType: 'application/json',
            dataType: 'json',
            success: function(data) {
                if (typeof callback == "function"){
                    callback('success',data);
                }   
            },
            complete: function(){
                if (typeof callback == "function"){
                    callback('complete');
                }
            }
        }).fail(function(xhr, status, error) {
            if (typeof callback == "function"){
                callback('fail',error);
            }   
        });
    },

非常感谢您的帮助。提前感谢。

这与jquery代码无关。是浏览器阻止了呼叫。 我建议您确保以下内容:

同样的标题正在出现http://server.com/event/live 如前所述的路线。 在xhr中尝试将数据类型作为jsonp,如果这解决了问题,那么在这种情况下,肯定不会纠正头响应的拼写错误或丢失的内容。对于您正在执行的项目类型,根本不建议使用jsonp。 最重要的是,如果你在该航线上进行POST/PUT,请确保你回复选项类型的呼叫探索飞行前呼叫
当我尝试使用curl-X选项时http://api-host/event/live 然后我从服务器得到curl:52的空回复。我需要查看nginx站点配置文件,因为它可能正在使用代理服务器。这是案例3,您没有得到405,这意味着nginx配置不允许访问api服务器,或者api服务器没有给出错误的响应选项。此外,请检查标题以及选项Call抱歉,我放错了api主机。现在我得到了更多的回应。我可以看到响应标题-访问控制允许来源:*访问控制允许方法:GET、PUT、POST、DELETE、OPTIONS访问控制允许标题:内容类型、授权、内容长度、X-request-WithI使用的方法PUT,看起来还可以。我怎样才能知道是否还有其他阻塞方法在起作用。我猜“阻塞方法”的意思与PUT相同。所以,除了PUT之外,POST是一种通过浏览器在飞行前调用中检查此标题的方法。除了OPTIONS/HEAD/TRACE之外,所有方法都会选中此标题