如何使用jsonp和jquery加载json文件

如何使用jsonp和jquery加载json文件,jquery,json,jsonp,Jquery,Json,Jsonp,我在远程url中有一个文件abcjsn.json,如:http://abc.com/abcjsn.json Json文件的内容是: { "root": { "node": [ { "@attributes": { "id": "6", "name": "Europe", "description": "European Curricula"

我在远程url中有一个文件abcjsn.json,如:http://abc.com/abcjsn.json Json文件的内容是:

    {
"root": {
    "node": [
        {
            "@attributes": {
                "id": "6",
                "name": "Europe",
                "description": "European Curricula"
            },
            "node": {
                "@attributes": {
                    "id": "2553",
                    "name": "Ireland",
                    "description": "Irish Curricula"
                },
                "node": {
                    "@attributes": {
                        "id": "3083",
                        "name": "Primary School Curriculum",
                        "description": "Primary Curriculum"
                    }
                }
            }
        },
        {
            "@attributes": {
                "id": "7",
                "name": "Middle East",
                "description": "Middle Eastern Curricula"
            }
        },
        {
            "@attributes": {
                "id": "8",
                "name": "North America",
                "description": "North American Curricula"
            }
        },
        {
            "@attributes": {
                "id": "9",
                "name": "South America",
                "description": "South American Curricula"
            }
        }
    ]
}
}

我正在使用以下代码访问它:

var url = "http://abc.com/abcjsn.json"

        $.ajax({
          url: url,
          dataType: 'jsonp',
          data:  {},
          success: function(data) { alert(data); },
          jsonp: 'jsonp'
        });
但我无法访问它。它将进入警报状态。 我该怎么做。

这样做

 var url = "http://abc.com/abcjsn.json"

    $.ajax({
      url: url,
      dataType: 'json',
      data:  {},
      success: function(data) { alert(data); }
    });
编辑

删除JsonP是因为如果您使用的是JsonP,那么您正在加载的源代码应该如下所示

myLocalFunc({
    // Contnet of that json;
});
加载后,将执行名为
myLocalFunc
的函数。您正在调用的只是一个json。我假设您具有跨域访问权限

编辑


如果您没有跨域访问权限,那么您必须在服务器中实现一个代理,该代理将请求远程服务器,并将结果提供给您或用户一些讨论过的跨域技术。但是请注意,它们仅在您有权访问目标域时才适用。

服务器应返回类似的内容

myCallBackFunction
(“{….}”)

您的
myCallBackFunction
应该调用j
Query.parseJSON(…)


然后就可以了。

假设服务器将JSON包装在一个函数中,那么这应该可以工作:

var url = "http://abc.com/abcjsn.json?callback=?";

$.getJSON(url, function(data){
  console.log(data);
}
请注意url中的
回调
参数。

这将允许您从
跨域访问:

上面问题中的
JSON
应该包装在
函数中
调用:

步骤1:使
功能可用:
确保事先在
全局窗口对象
上定义了
myCallbackFunc
(加载
脚本标记
后将立即执行此函数)。例如:

window.myCallbackFunc = function(jsonData) {
   // do something with the jsondata
}
myCallbackFunction({
  "root": {...}
});
步骤2:准备
远程JSON文件
: 确保远程
JSON文件
正在调用
myCallbackFunc函数
,并将
JSON
传递给它。例如:

window.myCallbackFunc = function(jsonData) {
   // do something with the jsondata
}
myCallbackFunction({
  "root": {...}
});
步骤3:准备并加载
脚本
标记:
然后,您应该使用
script
标记请求此文件,如下所示:

var scriptEl = document.createElement('script');
scriptEl.src =  "http://example.com/abcjsn.json?callback=myCallbackFunc";
scriptEl.type = "text/javascript";
document.body.appendChild(scriptEl);
注意:我们需要在
查询字符串
中添加
回调
,其值具有
函数
名称(
myCallbackFunc
)。加载文件后,将执行此函数


祝你好运

服务器必须支持JSONP。如果不是,你就不走运了。我必须进行跨域访问。如果不是本地的,你能与我们共享JSON所在的URL吗?我无法访问。看看-注意json对象是如何作为参数传递给函数
myCallback