带有url的ajax返回交叉源请求被阻止

时间:2014-09-26 11:06:28

标签: jquery ajax

在我的项目中,我使用MVC api。 我试图通过AJAX在一个完整的URL中获取这个(和其他)数据:  网址:http://urlexample.com

这给出了一个错误: 跨越原始请求被阻止

我做错了什么?谁可以帮助我? 关于这个问题还有很多东西要读,但到目前为止还没有解决这个问题。

这是我的代码:

<script type="text/javascript">
function loadstudentid() {
    $.ajax({
        // url: '/api/AZstudent', // > work fine
        //  url: 'http://<domain>.<subdomain>/api/azstudent', > // Gives  te issue
        cache: false,
        dataType: 'json',
        success: function (data) {
            $(data).each(function (i, item) {
                $(item).each(function (i, stud) {
                    console.log(stud.id_student);
                });
            });

        },
        error: function (request, status, error) {
            console.log('error', error);

        }
    });
}

Wy是否有效?

<script type="text/javascript">
function doewat() {
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
    tags: "mount rainier",
    tagmode: "any",
    format: "json"
})
.done(function( data ) {
    $.each( data.items, function( i, item ) {
        $( "<img>" ).attr( "src", item.media.m ).appendTo( "#images" );
        if ( i === 3 ) {
            return false;
        }
    });
});
}
//)();

http://api.jquery.com/jquery.getjson/

尝试了以下

jQuery.support.cors = false;

crossDomain: true,

var url = 'http://myurl.com/api'

2 个答案:

答案 0 :(得分:1)

这是有效的原因:

url: '/api/AZstudent',

是因为它是一个相对路径,这意味着它将解析为其当前域(可能是localhost?)

另一个不是因为ajax请求源自域example.com到&gt; somethingelse.com

这不起作用,因为这将允许人们执行恶意操作。

以下是对此的更深入的解读: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

答案 1 :(得分:0)

实现这一目标的唯一方法是CORS。你可以找到一个关于如何实现它的好教程here

简而言之,这(主要)是关于服务器,而不是您的JavaScript代码。您需要让服务器将 Access-Control-Allow-Origin 设置为您发出请求的 URL。如果您无法访问服务器,那么您运气不好 - 您唯一能做的就是让自己的服务器(在同一个域上)充当代理,来自其他服务器的请求然后传递结果。