jquery Ajax API调用Cock-Control-Allow-Origin,Origin不允许访问[重复]

yzuktlbb  于 2024-01-07  发布在  jQuery
关注(0)|答案(1)|浏览(134)

此问题在此处已有答案

AJAX cross domain call(11个回答)
7年前关闭。
我已经阅读了每一个可以想象的链接,我可以找到关于这个问题,但我仍然不能让它工作。
我正在向一个API(在另一个域上)发出AJAX请求(从我的域),但我一直在控制台日志中得到的是(显然我已经修改了排除任何域等):
XMLHttpRequest无法加载https://[APIPROVIDER]/something.json?选项。所请求的资源上不存在“PITCH-Control-Allow-Origin”标头。因此,不允许访问Origin“http://[MYDOMAIN].com”。
下面是我的代码:

$(document).ready(function() {
function step1(){
    $.ajax({
        url: 'getit.php',
        method: 'get',
        dataType : 'json',
        success: function(data){
            step2(data.url);
        },
        error: function(jqXHR, status, error) {
            console.log(error);
        }
    });
}
function step2(url){
    $.ajax({
        url: url,
        type: 'get',
        dataType : 'json',
        success: function(data){
            console.log(data);
        },
        error: function(xhr, status, error) {
            console.log(error);
        }
    });
}
step1();
});

字符串
我试过,ajaxSetup(设置头),没有帮助。
我试过了headers: { 'Access-Control-Allow-Origin': '*' }
我试过crossDomain: true
我试过删除dataType : 'json'
就像我说的,这是慢慢地把我逼疯了.主要是因为这是唯一的事情阻止我继续前进,并与呈现响应.它是如此接近,我只是不断得到这个错误,无论我做什么.我已经读了几篇文章CORS,在标题中的控制-允许-起源.我仍然不明白为什么我得到这个错误.
任何帮助都非常感谢!/绝望

8zzbczxx

8zzbczxx1#

我不得不承认,我仍然有点困惑于整个CORS/code-Control-Allow-Origin with AJAX(从我的理解来看,这是jQuery客户端调用的结果。也就是说,因为服务器端域不再“起作用”)。但我最终使用PHP代理让它工作。这是我最终得到的(对于我自己的符号,以及其他任何与同样问题作斗争的人)。

**注意!**这里的“关键”部分是针对我自己的需求的(我只是想为任何可能对所有这些都不熟悉的人展示整个代码)。也就是说,这里要解决的问题是代理部分,在服务器端进行调用并发送具有正确头部的请求。

jQuery/AJAX

$(document).ready(function() {
    function step1(){
        $.ajax({
            url: 'key.php', //get the API key. Remember to check path for key
            method: 'get',
            dataType : 'json',
            success: function(data){
                step2(data.key); //start step2 and send the key
            },
            error: function(jqhxr, status, error) {
                console.log(error);
            }
        });
    }
    function step2(key){
        var apiCall = '[APIURL]';
        $.ajax({
            beforeSend: function(jqxhr, settings) { //send request via PHP proxy. Remember to check path for proxy
                settings.url = 'proxy.php?r=' + encodeURIComponent(settings.url);
            },
            url: apiCall,
            type: 'get',
            dataType : 'json',
            data: {
                apikey: key
            },
            success: function(data){
                // do something with response
            },
            error: function(xhr, status, error) {
                console.log(error);
            }
        });
    }
    step1(); //initiate everything
});

字符串
PHP getkey

<?php
    require_once('[MY_ABS_PATH_ON_SERVER]/key.php'); //Store API Key outside of public domain for security purposes
?>


PHP密钥(在服务器上可公开访问的文件夹之外)

<?php
    $key = '[MY_API_KEY]';

    $arrvars = array(
        'key' => $key
    );

    echo json_encode($arrvars);
?>


PHP代理

<?php

    $url = $_GET["r"];

    $ch = curl_init($url);
    $options = array(
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true
    );
    curl_setopt_array( $ch, $options );
    $response = curl_exec($ch);
    curl_close($ch);    

    header("Content-Type: application/json; charset=utf-8");
    header("Access-Control-Allow-Headers: X-Requested-With");
    header("Access-Control-Allow-Methods: GET, OPTIONS");
    header("Access-Control-Allow-Origin: [MYDOMAIN]");

    echo($response);
?>


我想我只是需要一些睡眠......我一直盯着自己盲目的在这太久了。

相关问题