【问题标题】:JSONP: how to construct ajax query?JSONP:如何构造ajax查询?
【发布时间】:2011-05-10 07:12:13
【问题描述】:

我正在尝试跨域使用 JSONP API。这是它返回的数据示例:

photos({"marker":{"@attributes":{"id":"30601","latitude":"52.638061","longitude":"-2.117067","feature":"3","caption":"cat","thumbnailSizes":"60|120|150|180|200|250|300|350|400|400|425|450|500|640"}}});

如何构造一个利用这些数据的 Ajax 调用?我不断收到错误消息。

这是我目前正在尝试的:

$.ajax({
    url: pm_url,
    data: {},
    type: "get",
    dataType: "jsonp",
    cache: false,
    success: function(data) {
        console.log(data);
    },
    error: function() {
        alert('Sorry, there was a problem getting the photos!');
    }

在 Firebug 中,我可以看到正在检索上面的数据,但随后我看到了错误消息。

请求有什么问题? (或数据 - 虽然它验证为 JSONP。)

更新:

感谢您的建议。我现在正在尝试:

            var photos = function (data) {
              alert(data);
            };
            $.ajax({
                url: pm_url,
                dataType: 'jsonp',
                jsonpCallback: 'photos',
            });

奇怪的是,这在 Firebug 中调用了两个 URL:

http://myapi.com/file.jsonp?x=1&y=2?callback=?
http://myapi.com/file.jsonp?x=1&y=2?callback=photos&_=1304982373561

第一个 URL 在控制台中显示为错误。我做错了什么?!

API 本身可能是错误的(他们需要 .jsonp 后缀并忽略回调的值,这就是函数名称固定的原因)但我希望我能解决它。

【问题讨论】:

  • 在 Firebug/Fiddler 中请求的响应是什么?
  • 请求本身是200 OK,返回上面的数据,但是Firebug说:“photos is not a function”。然后我看到错误消息。
  • 好的,JSONP 真的很吃力。任何人都可以帮助我让这个 jsFiddle 做某事,只需使用 Twitter JSONP API 吗? jsfiddle.net/R7EPt/8 谢谢!
  • 这并不完全使用 JSONP,但它正在工作。希望你能从这里把它带到你需要的地方:jsfiddle.net/R7EPt/9

标签: jquery json jsonp


【解决方案1】:

函数名称(照片)错误。 jQuery 将发送一个名为“callback”的 GET 参数,该参数的值是函数需要具有的名称。

响应,PHP 示例:

<?php echo $_GET['callback'].'('.json_encode($some_object).');';?>

解释 jsonp 会发生什么:

假设一个回调参数发送值为 jquery1234: jQuery 将创建一个临时函数:

function jquery1234(data){return data;}

因此,如果您发送类似

的响应
jquery1234({'somevar':'somevalue'});

...jQuery 将创建该响应的脚本元素,调用该函数并将对象转移到成功函数。

【讨论】:

  • 谢谢。有什么办法可以强制回调参数被称为“照片”? (我无法控制 API。)
  • @simon:是的,您可以将jsonpCallback:'photos' 添加到配置中。查看jQuery.ajax API的更多信息
【解决方案2】:

为什么不使用 $.getJSON() ? http://api.jquery.com/jQuery.getJSON/

【讨论】:

  • 先试过了,也给了我错误。我不得不说,目前 JSONP 让我很困惑。
  • 跨域限制 - @antonR
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多