0

远程 urlhttp://remote-server/json-data.php包含以下格式的数据:

[{"id":"1","partname":"R1","date":"10/12/2012"},{"id":"2","partname":"R2","date":"10/10/2012"},{"id":"3","partname":"R3","date":"07/12/2012"},{"id":"4","partname":"R4","date":"14/06/2012"}]

这是我的 jQuery,它应该读取上述数据并将其显示在 html 或 php 文件中。这目前不起作用:

$(document).ready(function () {
var url = "http://remote-server/json-data.php";

var success = function(data){
    data = $.parseJSON(data);
    $.each(data, function(index, element) {
        $('div.outerBox').append('<div>'+element.partname+'/'+element.date+'</div>');
    });
}


$.ajax({
    type: 'GET',   
    url: url,
    dataType: "jsonp",
    crossDomain: true,         
    cache:false,
    success: success,
    error:function(jqXHR, textStatus, errorThrown){
      alert(errorThrown);
    }
});
});

当我刷新页面时,我在 javascript 警告框中收到一条错误消息,如下所示:Error: jQuery142452552225_55355545554 was not called.

我尝试将该远程文件放入我的本地服务器,它似乎可以正常工作$.getJSON()。不知道我在这里做错了什么。

4

2 回答 2

2

如果服务器没有准备好处理 JSONP 请求,它将无法工作。

JSONP 不是严格意义上的客户端数据操作,它涉及服务器交互

使用 jsonp 时,响应应包含在 javascript 函数中。

因此,为了简单起见,假设您有一个空的 JSON 对象,服务器将返回给您。IE{}

要对您要执行的对象提出标准请求

$.ajax({
    type: 'GET',   
    url: url,
    dataType: "json",
    success: function(data) {
      alert("Retrieved : " + JSON.stringify(data);
    },
    error:function(jq, st, error){
      alert(error);
    }
});

所做的只是发出一个标准的 HTTP 请求并从 url 中检索空对象。

如果您想使用JSONP相同的网址,请尝试类似

$.ajax({
    type: 'GET',   
    url: url,
    dataType: "jsonp",
    crossDomain: true,
    success: function(data) {
      alert("Retrieved : " + JSON.stringify(data);
    },
    error:function(jq, st, error){
      alert(error);
    }
});

这样做是需要你有一个 url 附加一个?callback={Some Random jQuery function}. 在您的情况下,随机 jQuery 函数是jQuery142452552225_55355545554. 服务器必须获取该空 JSON 对象并将其包装在回调中,因此不应返回{}它,而是应返回jQuery142452552225_55355545554({})application/json 的 HTTP 内容类型标头。

这是对 coderwall 的 JSON 请求的小提琴,它失败了,然后尝试了一个成功运行的 JSONP 请求。 JSONP 示例

于 2013-07-03T06:19:48.497 回答
1

远程 urlhttp://remote-server/json-data.php包含以下格式的数据:

[{"id":"1","partname":"R1","date":"10/12/2012"},{"id":"2","partname":"R2","date ":"10/10/2012"},{"id":"3","partname":"R3","date":"07/12/2012"},{"id":"4", “零件名称”:“R4”,“日期”:“14/06/2012”}]

嗯,这就是问题所在。您的远程 url 返回 JSON,而不是 JSONP。这就是为什么你不能消费它。远程服务器应该返回 JSONP:

callbackFunctionName([
    {
        "id": "1",
        "partname": "R1",
        "date": "10/12/2012"
    },
    {
        "id": "2",
        "partname": "R2",
        "date": "10/10/2012"
    },
    {
        "id": "3",
        "partname": "R3",
        "date": "07/12/2012"
    },
    {
        "id": "4",
        "partname": "R4",
        "date": "14/06/2012"
    }
]);

wherecallbackFunctionName应该通过将参数传递给您的服务器来动态指定。像这样:

http://remote-server/json-data.php?callback=callbackFunctionName

当你调用这个 url 时,你应该返回一个 JSONP 响应。

于 2013-07-03T06:19:49.420 回答