向Yahoo Finance API发出JSONP请求时获得400错误请求
Getting 400 Bad Request when making JSONP request to Yahoo Finance API
我想要一个输入字段,当用户用字母输入时,它会建议股票行情,就像你在雅虎或谷歌金融上看到的那样。我不能只使用JSON,除非我启用CORS,在这种情况下它是有效的。以下是我在研究我面临的问题时,从Stack Overflow(这里和这里)上发现的各种问题中拼凑而成的代码。
$("input#stocklookup").autocomplete({
source: function(request, response){
$.ajax({
url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query='+request.term+'®ion=US&lang=en-US',
dataType: 'jsonp',
jsonpCallback: 'YAHOO.util.ScriptNodeDataSource.callbacks'
});
YAHOO = {
util: {
ScriptNodeDataSource: {
callbacks: function(data) {
console.log(data);
}
}
}
};
}
})
搜索"a"时,我会得到一个400错误,URL列为http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=a®ion=US&lang=en-US&callback=YAHOO.util.ScriptNodeDataSource.callbacks&_=1462660878200
我认为结尾的额外数字可能是导致400的原因,但我不知道为什么它会被附加到URL中。如果您导航到上面的URL,结果将正确显示在浏览器中。
在learn-jQuery文档中看到这个页面后,我也尝试过使用这个代码块,但使用它时也出现了400错误。
.$ajax({
url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?region=US&lang=en-US',
jsonp: 'callback',
dataType: 'jsonp',
data: {
q: request.term,
format: 'json'
},
success: function(response){
console.log(response);
}
})
如果能帮我找到正确的方向,我们将不胜感激。谢谢
更新
$.ajax({
url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query='+request.term+'®ion=US&lang=en-US',
cache: true, //<--new
dataType: 'jsonp',
jsonpCallback: 'YAHOO.util.ScriptNodeDataSource.callbacks'
});
YAHOO = {
util: {
ScriptNodeDataSource: {
callbacks: function(data) {
console.log(data);
}
}
}
};
这适用于某些请求,但不适用于其他请求,有些请求仍然返回400状态。
将此添加到我的HTML文件中。
<meta charset="UTF-8" name="referrer" content="no-referrer">
只是提醒一下-我有几个项目(Java和JavaScript)调用这个API。它们通常工作,但偶尔会在不更改代码的情况下以400失败,然后在几小时/几天后再次工作,不更改代码。我认为如果服务器有一些问题,它可能会返回这个,而不是500范围内的正确错误(服务器错误-是我,而不是你)
400范围内的错误应该是来自服务器的消息,大意是"是你,不是我——在你再次发送之前修复你的请求",但我认为API不是这样。
例如,我的一个请求是:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20=%20%22USDGBP%22&env=store://datatables.org/alltableswithkeys
在浏览器中,我得到了相同的400错误,但以下是XML。。。。
<error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:lang="en-US">
<description>
No definition found for Table yahoo.finance.xchange
</description>
</error>
简而言之,可能是他们而不是你!
- 尝试发布大型JSON数据时出现错误请求错误
- 仅在 IE 中使用 jQuery 发布数据时出现错误请求错误
- JavaScript JSONP请求错误--未捕获的语法错误:意外的令牌:
- 正在生成$http.get请求..错误
- CORS预检请求错误无法通过安装npm cors软件包解决
- JSON PUT 请求错误
- 400 错误请求错误在 Ajax POST 到 spring RestController
- 使用 cURL 请求 svg.sencha.io 时请求错误
- WCF Web 服务在通过 Javascript 调用时返回“错误请求”错误
- JSFiddle “请使用后请求”错误
- 使用 JS 更改映像路径的请求错误
- AngularJS对跨源资源执行OPTIONS HTTP请求=>错误401
- 条纹::无效请求错误(此客户没有附加的付款来源)
- JSON 请求错误 500
- Ajax 请求错误 404
- 在 Node.js 服务器内发出异步请求错误:“类型错误:对象 #<对象> 没有方法'_implicitHeader'”
- 为什么这个 $.getJSON 请求错误
- 角度/业力 - 预期请求和观察到的请求相同时的“意外请求”错误
- 从 Mapbox.js 使用“LoadURL()”时出现“跨源请求错误”
- Chrome 应用/扩展程序 - 后台请求错误,或允许应用问题加载 Google 文档 API