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

时间:2012-02-09 14:17:10

标签: jquery json jsonp

我在远程网址中有一个文件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'
        });

但我无法访问它。它更新得警惕。 我怎么能这样做。

4 个答案:

答案 0 :(得分:1)

服务器应该返回类似

的内容

myCallBackFunction( '{....}')

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

然后就可以了。

答案 1 :(得分:1)

假设服务器将JSON包装在一个函数中,那么这应该有效:

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

$.getJSON(url, function(data){
  console.log(data);
}

请注意网址中的callback参数。

答案 2 :(得分:0)

这样做

 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。我以为你有跨域访问权。

    编辑

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

答案 3 :(得分:0)

这将允许您从Cross Domain

进行访问

上述问题中的JSON应该包含在function来电中:

第1步:使function可用:

确保事先在myCallbackFunc 上定义了global window object (加载script-tag后,此功能将立即执行)。例如:

window.myCallbackFunc = function(jsonData) {
   // do something with the jsondata
}

第2步:准备remote JSON file

确保远程JSON file正在调用myCallbackFunc function并传递JSON。例如:

myCallbackFunction({
  "root": {...}
});

步骤3:准备并加载script标签:

然后,您应该使用script标记请求此文件,如下所示:

var scriptEl = document.createElement('script');
scriptEl.src =  "http://example.com/abcjsn.json?callback=myCallbackFunc";
scriptEl.type = "text/javascript";
document.body.appendChild(scriptEl);

注意:我们需要在callback中添加query-string,其值为name function({{1} }} 在这种情况下)。加载文件后将执行此功能。

祝你好运......