2

我正在研究 javascript 和 json,我需要从另一台服务器获取我的 json 文件。我已经使用本地 json 文件进行了一些 javascript 测试,但现在我想将所有代码转换为 jsonp,因为我需要处理另一个域上的文件。我的代码是:

function jsonEntity()
{
 var richiestaEntity = new XMLHttpRequest();

richiestaEntity.onreadystatechange = function()
{
    if(richiestaEntity.readyState == 4) 
{
        var objectentityjson = {};
        window.arrayEntity= []; //creazione dell'array che conterrà le entity
        objectentityjson = JSON.parse(richiestaEntity.responseText);

        arrayEntita = objectentityjson.cards;

    return arrayEntita;
    }
}
richiestaEntity.open("GET", "myjson.json", true);
richiestaEntity.send(null);
}

如何在不丢失代码结构的情况下使用 jsonp 而不是本地 json?

4

2 回答 2

4

JSONP 和 JSON 在幕后的工作方式根本不同。有关更多详细信息,请参阅我的其他 Stack Overflow 答案

由于 JSONP 的工作方式,需要服务器的配合才能将 JSON 响应包装在函数调用中(函数调用的名称通常由callbackGET 参数指定);

/get_jsonp.php?callback=foo

(应得:

foo({
    "foo": "bar"
});

...在回应中。

假设您已经合作,您可以按如下方式更改现有功能;

function jsonEntity()
{
   var callbackName = "ajaxCallback";
   var script = document.createElement("script");

   // This bit needs the cooperation of the server, 
   // otherwise `ajaxCallback` won't be called.
   script.src = "myjson.json?callback=" + callbackName;

   window[callbackName] = function (obj) {
       window.arrayEntity = obj.cards;
   }

   document.body.appendChild(script);
}
于 2012-06-26T09:24:09.810 回答
1

JSONP 的工作方式与 JSON 不同。

使用 JSON,您基本上可以使用 XHR 从您的服务器请求一个文件,解析它并使用结果对象。

使用 JSONP,您可以插入一个<script>标签,就像从其他服务器加载库时一样。只是有一些区别:在 URL 中,您传输一个附加参数,即回调函数,并在您的页面上定义该函数。

这可能如下所示。首先我们定义我们的回调:

function myCallback( data ) {
  // do some stuff with data
}

然后我们动态插入一个新<script>标签来检索数据。

<script src="path.to/remote/server.js?callback=myCallback" type="text/javascript"></script>

我们完成了。

服务器现在发送表单的答案

myCallback( {"your": "answer", "is": "here" } );

它调用您的回调函数并启动您的处理。请参阅此处,服务器不是通常的 JSON 响应,而是使用代表 JSON 的对象作为参数对您的回调进行函数调用。

请注意,参数的名称(在我的示例中为“回调”)可能因服务提供商而异。因此,在使用之前查找正确的名称。

需要注意的另一件事是,这仅适用于GET请求。您不能将此技术用于POST请求。

于 2012-06-26T09:24:16.637 回答