【问题标题】:Cross-domain JSON request?跨域 JSON 请求?
【发布时间】:2011-01-04 12:57:36
【问题描述】:

问题:

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

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

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);

【问题讨论】:

  • 如果您使用“http_request.responseXML”,那么如果您从服务器的响应不是 XML,它将变为 null。

标签: javascript json xmlhttprequest


【解决方案1】:

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

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);

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

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

您可以使用它来构建 API,在其中将回调函数的名称作为请求查询字符串参数传递。 Here's an example of such an API

【讨论】:

【解决方案2】:

JSON 只是一种序列化方法。序列化方法与浏览器是否会尝试阻止您跨域访问数据的问题之间没有任何关系。 (这解释了为什么您只查找解析器 - JSON 没有任何内容,除了对其进行编码和解码)。

XMLHTTPRequest 只是命名为 XML HTTPRequest。它与 XML 没有任何关系。它可用于发送文本数据、以 JSON 编码的数据或任何其他序列化方法。

有几种方法可以跨域访问数据。 David Hedlund的回答中描述了一个。其他可以在类似问题的答案中找到(参见herehere)。

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2023-04-03
    • 2017-06-15
    相关资源
    最近更新 更多