【问题标题】:Interpreting JSONP via cross-site AJAX通过跨站点 AJAX 解释 JSONP
【发布时间】:2016-02-12 00:34:37
【问题描述】:

我正在尝试从 Premier League Fantasy Football 网站中提取一些数据,但未能找到类似于 catch 22 的内容。

我的 AJAX JSONP 脚本如下所示:

function getPlayer(playerNumber) {
$.ajax({
    url: 'http://fantasy.premierleague.com/web/api/elements/' + playerNumber + '/',
    dataType: 'jsonp',
    success : function(responseText) {
        alert(responseText);
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
        if (XMLHttpRequest.status != 200)
            alert('getPlayer failed!');
    },
    complete : function(jqXHR) {
        alert('complete');
    }
});

}

这会产生错误SyntaxError: missing ; before statement

我相信由于此页面上已接受的答案: AJAX call and clean JSON but Syntax Error: missing ; before statement

将 dataType 更改为 json 意味着我违反了此处描述的相同来源政策。

让我恼火的是,当我使用 JSONP 版本时,我的状态为 200,我可以在 Firefox 调试器中看到完整的“对象”结构。

那么,Firefox 正在做什么来获取我没有的数据?

【问题讨论】:

  • 你不能让网站支持 jsonp,他们需要最终支持它。
  • 那么你如何解释 Firefox 如何向他显示数据?
  • 了解 epascarello,谢谢。我只是好奇 FF 中发生了什么。
  • @mariocatch 你不能通过随机的 JSONP 回调让服务器返回 JSONP。我可以将任何 JavaScrip 文件粘贴在 JSONP 调用所做的页面上。浏览器所做的就是在页面上粘贴<script src="http://fantasy.premierleague.com/web/api/elements/1111"></script>。所以当然代码会被卡住,但你不会像 JSONP 期望的那样将 functionName() 包裹起来。
  • 我明白 :) 我在问他的 FF 是如何返回他所追求的响应的。

标签: javascript jquery ajax jsonp


【解决方案1】:

好吧,看来我是从错误的角度来处理这个问题的。显然 Firefox 没有使用 JS 来获取数据,所以最终我也没有。

PHP cURL 成功了:

$curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, 'http://fantasy.premierleague.com/web/api/elements/' . $playerId);
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curlSession);
$player = json_decode($result, true);
curl_close($curlSession);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2012-07-31
    • 2013-04-04
    • 2011-05-02
    • 2012-03-05
    • 2011-04-12
    • 2011-01-14
    相关资源
    最近更新 更多