【问题标题】:Getting data from external server with JSONP使用 JSONP 从外部服务器获取数据
【发布时间】:2013-09-11 09:20:46
【问题描述】:

我试图从外部服务器上的 web api 获取一些数据。我可以在网络 -> Chrome 调试器中的响应下看到正确的数据。

如果我用闪烁的 JSON url 替换我的 url,我会成功。我可以在响应中看到数据显示不同,但我不知道如何将我的数据更改为与 flickr 相同。

我做了一个 Fiddle 来演示我的问题:jsfiddle/8JDna/2/

<body>
    <div id="content">

        <div class="well">

        </div>        
    </div>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</body>

$(function () {

    var thisMonth = 0;

    var flickrURL = 'http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?';
    var myURL = 'http://driving.thylle.dk/api/distance?jsoncallback=?';

    $.ajax({
        url: myURL,
        jsonp: "callback",
        dataType: "jsonp",
        data: {
            format: "json"
        },
        success: function (data) {

            $(".well").html("<h3> SUCCESS </h3>");
        },
        error: function (xhr, textStatus, errorThrown) {

            $(".well" ).html("Error: " + textStatus + ": " + errorThrown);

        },
    });
});

希望你能理解我的问题

最好的问候拉斯穆斯

【问题讨论】:

    标签: ajax json get jsonp external


    【解决方案1】:

    第二个 URL 下的服务器实际上并没有返回 JSONP 响应,而只是返回纯 JSON。如果您可以控制该服务器,则必须使用 jsoncallback 参数来包装 JSON,如下所示:

    // jsoncallback=cb
    cb( ["you JSON response in here"] );
    

    所以在 PHP 中,例如,目前你可能有这样的东西:

    echo json_encode( $result );
    

    你应该把它改成

    echo $_REQUEST['jsoncallback'], "(", json_encode( $result ), ");";
    

    【讨论】:

    • 谢谢@Sirko,我认为这与我的 api 代码有关。是的,我可以访问,但我使用 C#,所以目前我有这个。 public IEnumerable&lt;Driving_distance&gt; GetDriving_distance() { return db.Driving_distance.AsEnumerable(); }
    • @Thylle 我对C#不是很熟悉,只是输出jsoncallback得到的参数,然后是(,你的实际内容和);
    • 感谢@Sirko,感谢您,我现在可以获取数据了。你让我在别处寻找。现在的问题是我无法发布到服务器。我收到一条成功消息,但数据尚未推送?
    • @Thylle 我建议为该问题打开一个新问题。可能与Same Origin Policy有关。
    猜你喜欢
    • 2015-02-23
    • 2015-11-24
    • 2014-03-10
    • 2020-11-25
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    相关资源
    最近更新 更多