当前位置: 首页 > 面试题库 >

Access-Control-Allow-Origin不允许使用原始http:// localhost。

缑勇锐
2023-03-14
问题内容

我有问题…我尝试在
http://api.master18.tiket.com/search/autocomplete/hotel?q=mah
&token=90d2fad44172390b11527557e6250e50&secretkey=83e2f0484edbd2ad6fc9888c1e30ea44&output=json

“中 获取json api

当我尝试离线模式(这意味着我将json API复制到记事本中并在我的本地主机中调用)时使用此代码…

function getLast(){
        $.ajax({
            url:"http://localhost/tickets/json/api_airport.json",
            type:'GET',
            dataType:"json",
            success:function(data){console.log(data.results.result[1].category);}
        });
    }

它运行完美。

但是,当我尝试使用以下代码对真正的网址(“
http://api.master18.tiket.com/search/autocomplete/hotel?q=mah
&token=90d2fad44172390b11527557e6250e50&secretkey=83e2f0484edbd2ad6fc9888c1e30ea44&output=json

“)进行解析时:

$.ajax({
            url:"http://api.master18.tiket.com/search/autocomplete/hotel?q=mah&token=90d2fad44172390b11527557e6250e50&secretkey=83e2f0484edbd2ad6fc9888c1e30ea44&output=json",
            type:'GET',
            crossDomain:true,
            beforeSend: function(x) {
                if(x && x.overrideMimeType) {
                    x.overrideMimeType("application/j-son;charset=UTF-8");
                }
            },
            success:function(data){console.log("Success");}
        });

然后在我的谷歌浏览器的JavaScript控制台,有这样的错误:“XMLHttpRequest的无法加载http://api.master18.tiket.com/search/autocomplete/hotel?q=mah&token=90d2fad44172390b11527557e6250e50&secretkey=83e2f0484edbd2ad6fc9888c1e30ea44&output=json产地(HTTP
:// localhost)是Access-Control-Allow-Origin所不允许的。”

我知道这一定是跨域问题,有人可以帮助我吗?nb:一些代码,我来自堆栈溢出社区....谢谢:)


问题答案:

您有两种前进的方式:

如果此API支持JSONP,则解决此问题的最简单方法是将其添加&callback到URL的末尾。您也可以尝试&callback=。如果这不起作用,则表示API不支持JSONP,因此您必须尝试其他解决方案。

代理脚本

您可以在与网站相同的域上创建代理脚本,以避免跨域问题。这仅适用于HTTP URL,不适用于HTTPS URL,但是如果需要的话,对其进行修改应该不会太困难。

<?php
// File Name: proxy.php
if (!isset($_GET['url'])) {
    die(); // Don't do anything if we don't have a URL to work with
}
$url = urldecode($_GET['url']);
$url = 'http://' . str_replace('http://', '', $url); // Avoid accessing the file system
echo file_get_contents($url); // You should probably use cURL. The concept is the same though

然后,您只需使用jQuery调用此脚本即可。确保urlencode输入URL。

$.ajax({
    url      : 'proxy.php?url=http%3A%2F%2Fapi.master18.tiket.com%2Fsearch%2Fautocomplete%2Fhotel%3Fq%3Dmah%26token%3D90d2fad44172390b11527557e6250e50%26secretkey%3D83e2f0484edbd2ad6fc9888c1e30ea44%26output%3Djson',
    type     : 'GET',
    dataType : 'json'
}).done(function(data) {
    console.log(data.results.result[1].category); // Do whatever you want here
});

为什么

由于XMLHttpRequest具有相同的原始策略,因此会出现此错误,基本上可以归结为将ajax请求限制为具有不同端口,域或协议的URL。设置此限制是为了防止跨站点脚本(XSS)攻击。

更多信息

我们的解决方案通过不同方式解决了这些问题。

JSONP使用将脚本标签指向JSON(包装在javascript函数中)以接收JSON的功能。JSONP页面被解释为javascript,并被执行。JSON将传递到您指定的函数。

代理脚本通过欺骗浏览器来工作,因为您实际上请求的页面与页面的来源相同。实际的跨域请求发生在服务器端。



 类似资料:
  • 问题内容: 我正在尝试从lobb.js到我的node.js服务器的访存。但是,我在控制台中收到以下错误: 我将以下内容添加到我的node.js服务器中: 但是它仍然返回相同的错误。但是,即使这确实可行,也不是理想的解决方案,因为我希望所有用户都能够发送请求。 问题答案: 如果您希望每个人都可以访问Node应用程序,请尝试使用 这将允许来自任何来源的请求。该CORS使网站有大量的信息在不同的访问控制

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?

  • 问题内容: 我是Ajax的新手,只是受过此跨域调用的任务。我们的网页上有一个文本框,用户可用来执行公司名称搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,Web服务位于单独的域中,因此自然会引起问题。 以下是我使这项工作的最佳尝试。我还要注意,此调用的目的是以XML格式返回结果,该结果将在请求的一部分中进行解析。 这又是错误消息: 对于解决方法,我不知所措,将不胜感激任何想法。 问题

  • 问题内容: 我制作了一个小的xslt文件,以使用以下代码创建一个名为weather.xsl的html输出: 我想将html输出加载到html文件中的div中,我正在尝试使用jQuery进行如下操作: 但是我收到以下错误:Access-Control-Allow-Origin不允许使用Origin null。 我已经读过有关向xslt添加标头的信息,但是我不确定如何做到这一点,因此将不胜感激,并且如

  • 问题内容: 我正在使用Sencha Touch 2应用程序(包装在PhoneGap中)到远程PHP服务器。 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。原产地不被访问控制允许来源允许的。 我该如何解决这个问题? 问题答案: 不久前,我写了一篇有关此问题的文章Cross Domain AJAX 。 如果