不同ip地址,不同域名,能通过cors跨域吗?

问题是这样的,可能之前问的有点不好,现在修改下。
我用wampserver建立两个站点ajax.com和ajax2.com,两个域名指向的ip地址分别为127.0.0.1,127.0.0.2,但端口同为80(不知怎么改为不同的端口),现在我想在ajax.com下的html文件,发送数据,同时请求ajax2.com的php文件内容,数据一起返回。

    <script>

    function createCORSRequest(method, url, data) {
        var xhr = new XMLHttpRequest();
        if ("withCredentials" in xhr) {
            xhr.open(method, url, true); //true指的是异步
        } else if (typeof XDomainRequest != "undefined") {
            xhr = new XDomainRequest();
            xhr.open(method, url);
        } else {
            xhr = null;
        }
        if (method === "post") {
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send(data);
        } else if (method === "get") {
            xhr.send(null);
        }
        return xhr;
    }
    var request = createCORSRequest("post", "http://ajax2.com/AJAX/05-XMLHTTPRequest-test.php","name=jack&age=20");
    if (request) {
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                console.log(request.responseText);
            }
        };

    }
    </script>
<?php
header("Content-Type:application/json;charset=utf-8");
    header('Access-Control-Allow-Origin:*');
    header('Access-Control-Allow-Methods:GET,POST');
    header('Access-Control-Allow-Headers:x-requested-with,content-type');
    header('Access-Control-Allow-Headers: NCZ');


    echo '请求成功';
    echo $_POST['name'].'  '.$_POST['age'];
?>

图片描述

这样就算是成功通过cors跨域了吧,然后呢,我是想找个线上的api来测试下,但找不到,能否给个例子看看,感激不尽。还有就是像这种接口这么调用获取数据?网址http://www.bejson.com/knownjs...,例如我想获取京东的数据,该怎么写?
图片描述

图片描述

阅读 11.8k
4 个回答

1、你上面所述的情况,的确说明了跨域成功。
2、有线上的api,但是很少有直接说明原理的。提供的api是为了方便接入系统的人调用,因此多数都直接写明使用方法。如http://datainfo.duapp.com/sho...
3、你提到的bejson就提供api接口调用。如果你想获取京东的商品信息,就像你所提到的那样。

代码部分:把你请求数据的网址换成http://p.3.cn/prices/mgets?sk...,请求模式GET就行。展示信息需要知道数据解析规范。规范是由接口的制定者决定的。

更新:

  1. 是的,你这就是跨域成功了。

  2. 开放平台的api,一般都有说明怎么解决跨域问题。请仔细查看其文档。

-----------以下是原答案-----------

首先,楼主要清楚一个概念:“是谁阻止了跨域访问?”
答案不是js,也不是web server,也不是服务端脚本。
而是浏览器。

每一段在浏览器运行的js,都有属于它的网址,网址当然就有域名。

当url-1里面的js发起ajax请求url-2时,浏览器此时不会检查跨域,而是直接向url-2发起请求。
当浏览器收到响应后,会判断url-2的域名是否和你ajax所在域名是否一致,如果不一致,浏览器会检查url-2的响应headers里面有没有声明允许跨域Access-Control-Allow-...,如果有且发起ajax的js所在域通过,那么会讲相应传递给js,否则在浏览器这里就阻断了。

说完了。感觉比百度上说的还复杂。。

为什么呢?因为楼主提的这个问题是个很复杂的问题。涉及范围包括:“域名、url、js、http、浏览器” 其中知识缺一不可。所以解释起来当然复杂。

有没有简单点的解答呢?
当然有,只要楼主说出自己服务端用的什么脚本语言,或者什么web server。然后给出js ajax请求的代码。
我用几行代码就能为楼主解决问题。而不是长篇大论跨域原理。

所以楼主,你到底是要听原理还是要实现代码?

自己项目的跨域就JSONP、CORS,公共API直接使用就可以了

线上的例子?
吶,这有一个

$.getJSON('https://api.github.com/').then(function(d){console.log(d)})

但你似乎想要的是“获取任意网址的信息”,服务器不配合,你怎么要得到,或者你可以让你的后台给你获取,然后

$.get('/get_some_page?url=baidu.com')

只能帮到这了

@娃娃脾气 说得很对

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏