使用jsonp使用jQuery调用jsonip.com时出现“无效标签”

时间:2012-01-16 22:31:27

标签: javascript jquery firebug jsonp

我绝对疯了......在执行这个简单的Javascript时,我在Firebug中不断出现“无效标签”错误:

$(document).ready(function(){
  $.ajax({
    url: "http://jsonip.com",
    dataType: "jsonp",
    success: function(data) {
      alert("success!")
    }
  });
});

Firebug会说(在控制台标签中):

Invalid label
{"ip":"99.99.99.99"}

带有指向第一个双引号的指针(由于显而易见的原因,模拟了IP地址)。

网络标签中的调用是人们所期望的:http://jsonip.com/?callback=jQuery17108684927028894522_1326752040735&_=1326752042159,因此回调参数也就位。

我正在使用jQuery 1.7.1。我也尝试过使用jQuery 1.6.4,但没有成功。

任何人......?谢谢!

4 个答案:

答案 0 :(得分:3)

要为jsonip.com指定JSONP回调,您必须将回调名称设置为:

http://jsonip.com/{theCallback}

要使用jQuery执行此操作,ajax方法有一些简单的配置。这段代码适合我:

$(document).ready(function() {
    $.ajax({
        url: "http://jsonip.com/theCallbackFunction",
        dataType: "jsonp",
        jsonp: false,
        jsonpCallback: "theCallbackFunction",

        success: function(data) {
            alert(data.ip);
        }
    });
});

问候!

答案 1 :(得分:1)

回调函数似乎作为url片段传递。查看fiddle

答案 2 :(得分:1)

关于eagleoneraptor的回答和lonesomeday的评论:

您可以动态创建回调函数的动态名称,并将该名称附加到网址:

$.ajax({
    url: "http://jsonip.com/",
    dataType: "jsonp",
    jsonpCallback:function(){var fnc='cb'+$.now();this.url+=fnc;return fnc;},
    jsonp:false,
    success: function(data) {
      alert(data.ip)
    }
  });

http://jsfiddle.net/doktormolle/YfHYs/

答案 3 :(得分:0)

我运行jsonip.com。

该服务现在支持:

  1. CORS
  2. 路径回调,http://jsonip.com/myfunc => MYFUNC({ “IP”: “”})
  3. 参数回调,http://jsonip.com/?callback=myfunc => MYFUNC({ “IP”: “”})
  4. 请注意,对于参数回调,需要?回调。当然,“myfunc”可以是你想要的任何东西。

    有关详细信息,请参阅http://jsonip.com/about