Javascript Cross domain JSON

Javascript Cross domain JSON

本文关键字:JSON domain Cross Javascript      更新时间:2023-09-26

嗨,我试图使用仅JavaScriptHTML从URL读取json对象。我使用以下代码:

function getJSONP(url, success) {
    var ud = '_' + +new Date,
        script = document.createElement('script'),
        head = document.getElementsByTagName('head')[0]
            || document.documentElement;
    window[ud] = function(data) {
        head.removeChild(script);
        success && success(data);
    };
    script.src = url.replace('callback=?', 'callback=' + ud);
    head.appendChild(script);
}
getJSONP('http://webURl?&callback=?', function(data){
    console.log(data);
});

正如你所猜到的,我得到了Not at same origin as the document, and parent of track element does not have a 'crossorigin' attribute. Origin 'null' is therefore not allowed access.

服务器返回JSON数据,没有回调函数

谢谢你的帮助

服务器需要启用CORS使用这样的头:(credit to answer here: CORS with php headers)

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    exit(0);
}

或者服务器需要输出JSONP如下:

echo $_GET['callback'] . '(' . json_encode($whatever) . ')';

如果这不是在你自己的服务器上,另一个选择是在你自己的服务器上创建一个PHP文件,在你需要读取的url上做一个filegetcontents(没有cors的JSON数据),并以JSONP格式回显相同的数据。然后,您可以在纯javascript getJSON函数中使用这个新的PHP文件(url)。

如果中间没有服务器或cors或jsonp,这是不可能的

如果你想要一个快速&您可以通过iframe获取内容,或者使用像YQL这样的代理。

但是我建议使用后端策略来获取你的内容,然后用javascript处理它。