我如何允许获取请求 - 403 禁止错误

How do I allow get requests - 403 forbidden error

我正在向我的图像目录发出 ajax 请求。这在本地主机上运行良好,但是当我将它放到网上时,出现 403(禁止访问)错误。我如何允许获取请求?

    $.ajax({    
        url: url,
        success: function(data) {
        var parser = new DOMParser(),
            doc = parser.parseFromString(data, 'text/html');
        var rows = doc.querySelector('table').querySelectorAll('tr');
        for (var i=0;i<rows.length;i++) {
            if (rows[i].children[2]) {
                var img = rows[i].children[2].children[0].getAttribute("href"); 
                if(img.match(/\.(jpeg|jpg|gif|png)$/) != null){
                    var html = '<li id="" style="background-image: url('+img+')"></li>';            
                    $('#nikoSlider ul').append(html)
                } else { console.log("This is not a valid image type: " + img) }
            }
        }
        nikoSlider();
        }
    });

我可以在 php 文件中使用类似 header('Access-Control-Allow-Origin: *'); 的东西吗?

您的 url 格式为 http://primaryman.com/pare/assets/images/{{COLLECTION}}/slider/,它是一个目录路径。根据您的评论之一,您无法使用 AJAX 访问目录。这是解决问题的最简单方法:

创建一个中间人 PHP 脚本,该脚本 returns 一个包含您需要的所有图像路径的 json 编码数组。然后在 AJAX 成功回调中,循环浏览图像并将它们附加到 DOM。由于路径的 COLLECTION 部分是可变的,因此无论使用什么路径,您都需要一种始终调用此 PHP 脚本的方法。我建议更改 AJAX 调用中的 url 以直接调用 PHP 脚本并将其提供给您想要的集合。例如,如果您尝试访问 roycesummit 集合,您将使用

url: '/path/to/slider_images.php?collection=royce //<- or collection=summit

在您的 PHP 脚本中,您可以找到最初请求的 url 路径:

$path = "/pare/assets/images/$_GET[collection]/slider/"

然后您可以使用它来获取匹配目录中的所有图像文件(记住只有 select 具有图像扩展名的文件),将它们放入 $images 数组中并将它们发送回浏览器:

echo json_encode($images);

This solution(您之前链接到的)有很好的代码可以帮助您入门。

@Patrick 感谢您的建议,我发现您的回答很有帮助。我最终选择了这样的东西,我确信它不是最佳的,但对于这个特定的项目来说效果很好。我大量借用了 403 Forbidden error while making an ajax request

allow.php:

<?php

$filenameArray = array();
$summit = array(); 
$royce = array(); 
$soundview = array(); 
$merrit = array(); 
$hillcroft = array(); 


$all = array(); 


$handle = opendir(dirname(realpath(__FILE__)).'/assets/images/summit/slider/');
    while($file = readdir($handle)){
        if($file !== '.' && $file !== '..'){
        array_push($filenameArray, "assets/images/summit/slider/$file");
        array_push($summit, "assets/images/summit/slider/$file");

        }
    }
array_push($all, $summit);


$handle = opendir(dirname(realpath(__FILE__)).'/assets/images/royce/slider/');
    while($file = readdir($handle)){
        if($file !== '.' && $file !== '..'){
        array_push($filenameArray, "assets/images/royce/slider/$file");
        array_push($royce, "assets/images/royce/slider/$file");

        }
    }
array_push($all, $royce);

$handle = opendir(dirname(realpath(__FILE__)).'/assets/images/soundview/slider/');
    while($file = readdir($handle)){
        if($file !== '.' && $file !== '..'){
        array_push($filenameArray, "assets/images/soundview/slider/$file");
            array_push($soundview, "assets/images/soundview/slider/$file");

        }
    }
array_push($all, $soundview);

$handle = opendir(dirname(realpath(__FILE__)).'/assets/images/merrit-station/slider/');
    while($file = readdir($handle)){
        if($file !== '.' && $file !== '..'){
            array_push($filenameArray, "assets/images/merrit-station/slider/$file");
            array_push($merrit, "assets/images/merrit-station/slider/$file");

    }
    }
array_push($all, $merrit);

$handle = opendir(dirname(realpath(__FILE__)).'/assets/images/hillcroft-danbury/slider/');
    while($file = readdir($handle)){
        if($file !== '.' && $file !== '..'){
        array_push($filenameArray, "assets/images/hillcroft-danbury/slider/$file");
                array_push($hillcroft, "assets/images/hillcroft-danbury/slider/$file");

        }
    }
array_push($all, $hillcroft);

echo json_encode($all);


?>       

然后是我的 JS:

$(document).ready(function(){/* Loop thru images folder */

    var page = ['summit','royce','soundview','merrit-station','hillcroft-danburmer'].indexOf(window.location.href.split('/').pop())
    console.log(page); 


    var url = "allow.php";
    $.ajax({    
        url: url,
            dataType: "json",

        success: function(data) {
            console.log(data);
            console.log(data);
            $.each(data[page], function(i,filename) {
                console.log(filename);
        var img = filename; 
        var arr = img.split('/');
        console.log(arr[arr.length-3])

        if(img.match(/\.(jpeg|jpg|gif|png)$/) != null && arr[arr.length-3] == window.location.href.split('/').pop()){
            var html = '<li id="" style="background-image: url('+img+')"></li>';            
            $('#nikoSlider ul').append(html)
            console.log(html);
        } else { console.log("This is not a valid image type: " + img) }


        })


        nikoSlider();
        }
    });
 //rows[i].children[2] $(rows[i].children[2]).find('attr', 'href').context.textContent $(rows[i].children[2]).text() rows[i].children[2].querySelector('a')['href'] 
})