使用Ajax跨域Json数据

时间:2015-05-24 12:26:48

标签: jquery ajax json

我在浏览器中获取数据(以json格式),但我无法在Javascript代码中获取数据。这是我的代码:

jQuery(document).ready(function ($) {
$.ajax({
            type: 'GET',
            url: "http://reelcinemas.ae/Data/MoviesSession.json?callback=?",
            async: false,
            jsonpCallback: 'jsonCallback',
            contentType: "application/json; charset=utf-8",
            crossDomain: true,
            dataType: 'jsonp',
            success: function (nowShowing) {
                nowShowingMoviesData = nowShowing;
            },
            error: function(xhr, status, error) { alert(error.text); },

        });
});

我在浏览器控制台中看到错误:Uncaught SyntaxError: Unexpected token <

如果我改变代码:

$.ajax({
            type: 'GET',
            url: "http://reelcinemas.ae/Data/MoviesSession.json?jsonCallback=?",
            processData: true,
            data: {},
            dataType: 'text/xml',
            jsonpCallback: 'jsonCallback',
            success: function (data) {
                processData(data);
            }
        });
        function jsonCallback(data) {
            console.log(data);

        }

我收到错误:No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; http://localhost:51418&#39;因此不允许访问。

但我可以从浏览器访问数据。

感谢

1 个答案:

答案 0 :(得分:0)

<强> CORS – Cross Origin Resource Sharing.

如果客户端具有不同的来源(在不同的服务器上),则需要您的服务器允许客户端加载资源。

这意味着,如果reelcinemas.ae未发送上述标题(Access-Control-Allow-Origin),则您的客户端将不会从那里加载资源。

例如,Access-Control-Allow-Origin: */*标头允许所有客户端通过AJAX从那里加载数据。

编辑1

要解决此限制,您可以在页面上创建一个包含此内容的PHP脚本,并从脚本中调用它:

<?php
    echo file_get_contents("http://reelcinemas.ae/Data/MoviesSession.json");
?>

阅读this article on MDN了解更多详情。

如果API提供商reelcinemas.ae未发送此类标头,则他们不希望您通过AJAX加载此资源。