【发布时间】:2015-11-11 18:30:12
【问题描述】:
我正在尝试使用 jQuery AJAX 方法通过 Web API 访问远程服务器。 API 是私有的,所以我不能给你我正在使用的 URL,但这里是一个例子:
https://api.somecompany.com/v2/search?oauth_token=OAUTH_TOKEN&keyword=KEYWORD&limit=LIMIT
API 支持 JSONP 并通知用户使用 JSONP 时 URL 格式应为:
https://api.somecompany.com/v2/search?oauth_token=OAUTH-TOKEN&keyword=KEYWORD&limit=LIMIT&callback=callbackFunction
我知道我的 Oauth 令牌是有效的,因为当我在浏览器中运行 URL 时,它会显示所需的 JSON,并且我知道 JSON 是有效的,因为我已经使用 JSONLint 进行了检查。使用第二个 URL 的浏览器中的数据格式如下所示:
callbackFunction({
"meta":{...}
"items":[...]
})
我正在尝试使用 jQuery 从 API 中以 JSONP 形式获取这些数据,但它似乎无法正常工作,我终生无法弄清楚。我使用的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<title>Template</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script type="text/javascript">
$(function()
{
$.ajax({
type: 'GET',
url: 'https://api.somecompany.com/v2/search?oauth_token=OAUTH-TOKEN&keyword=KEYWORD&limit=10',
dataType: 'jsonp',
success: function(data)
{
alert('Success!');
},
error: function (data, textStatus, errorThrown){
alert(textStatus);
},
complete: function(data, textSearch){
alert(data.resonseText);
alert(textStatus);
}
});
});
</script>
</head>
<body>
</body>
<html>
除了 (callback=?) 之外,该 URL 与第二个示例相同。我知道在 HTML 代码中编写一个完整的脚本很麻烦,但我只是想开始这个,它简化了我的工作。运行此代码时,我绝对不会收到任何警报。它甚至不会在控制台上返回错误。我用另一个不需要回调函数的 API 尝试了这个,我收到了成功警报。我的猜测是它与包装器有关,但我不太确定具体出了什么问题。我究竟做错了什么?你建议我尝试什么?我对 JavaScript/jQuery 很陌生,所以如果我犯了非常愚蠢的错误,请尽量放轻松。我也试过用 $.getJSON() 来做这个并且遇到了同样的问题。我已经尝试在函数中使用 console.log() 并且没有收到任何反馈。帮助!
编辑:我在 HTML 文档中使用的 url 已更新。如下:
https://api.somecompany.com/v2/search?oauth_token=OAUTH-TOKEN&keyword=KEYWORD&limit=10
我也尝试过使用网址:
https://api.somecompany.com/v2/search?oauth_token=OAUTH-TOKEN&keyword=KEYWORD&limit=10&callback=?
这似乎也不起作用。只显示控制台:
GET http://code.jquery.com/jquery-latest.min.js [HTTP/1.1 304 Not Modified 34ms]
GET http://code.jquery.com/ui/1.11.4/jquery-ui.js [HTTP/1.1 304 Not Modified 35ms]
如果我应该添加更多更新,请告诉我。
【问题讨论】:
-
url变量的内容是什么样的?问题中的代码,如果按字面意思使用(因为它看起来像一个完整的测试页),将会失败,因为url完全未定义。但我认为你只是为了这个问题把事情剪得太多了...... -
您在开发者控制台中看到了什么?
-
API 是否真的返回 JSONP?我们无法判断,因为您隐藏了 URL 并且没有显示它返回的内容(您应该能够使用开发人员工具中的 Net 选项卡来提取)。
-
您是否查看过网络选项卡中请求的响应选项卡?您的控制台没有显示错误的事实有点令人惊讶。它应该调用成功,或者在 jsonp 请求的情况下在控制台中打印语法错误。 (那个或网络错误,但你已经排除了)
-
Quentin:很遗憾,api 是专有信息,我无法提供 url。即使我这样做了,文档也是私有的。 API JSONP 支持的文档非常小,我在 HTML 代码上方用我自己的话给出了所有这些。
标签: javascript jquery json ajax jsonp