跨域 JSON 请求?

2022-01-15 00:00:00 json xmlhttprequest javascript

问题:

我正在尝试跨域使用 JSON,但我发现的只是 JSON 解析器,我不需要...
我读过可以使用 JSON 进行跨域请求,但到目前为止,我看到的只是使用 XMLHttpRequest 的实现...
- 这意味着您不能使用跨域请求,至少不能在 IE 8 之外使用......
我一直在 http://www.json.org/,但我发现的只是解析器还是没用.

到目前为止,我在谷歌上找到的最好的是
http://devpro.it/JSON/files/JSONRequest-js.html
但这相当混乱,不能跨域工作,也不能在域内工作 - 或者根本不工作......

I'm trying to use JSON accross domains, but all i find is JSON parsers, which I don't need...
I've read that it's possible to do cross-domain requests with JSON, but so far, all I see is implementations that use XMLHttpRequest...
- which means you can't use cross-domain requests, at least not outside IE 8...
I've been on http://www.json.org/, but all I find is either parsers or useless.

The best I've found with google so far is
http://devpro.it/JSON/files/JSONRequest-js.html
but this is rather a mess, doesn't work cross domain, and intra-domain neither - or rather not at all...

var the_object = {}; 
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
    if ( http_request.readyState == 4 && http_request.status == 200 ) {
            the_object = JSON.parse( http_request.responseText );
        }
};
http_request.send(null);

推荐答案

你可以做的跨域注入脚本包括:

What you can do cross-domain is inject a script include:

var s = document.createElement('script');
s.src = 'http://someotherdomain/getMeMyJs.aspx?parameter=value';
s.onload = someOptionalCallback;
s.type = 'text/javascript';

if(document.getElementsByTagName('head').length > 0)
    document.getElementsByTagName('head')[0].appendChild(s);

现在,该请求返回的代码将立即执行.如果您希望它与您的代码交互,您可以确保它与包装在函数调用中的所有数据一起返回:

Now, the code returned by that request will be executed immediately. If you want for that to interact with your code, you can make sure that it's being returned with all data wrapped in a function call:

jsonCallback({ object: json, whatever: value });

您可以使用它来构建 API,在其中将回调函数的名称作为请求查询字符串参数传递.这是一个这样的 API 示例

You can use that to build APIs, where you pass the name of a callback function as a request querystring parameter. Here's an example of such an API

相关文章