我希望有一个输入字段,可以在用户输入字母时提示股票行情,就像您在雅虎或Google财经上看到的那样。我不能只使用JSON,除非我启用CORS,在这种情况下它可以工作。这个代码是我在研究我面临的问题时从Stack Overflow(here和here)中发现的各种问题拼凑而成的。
$("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错误,并且网址列为
http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=a®ion=US&lang=en-US&callback=YAHOO.util.ScriptNodeDataSource.callbacks&_=1462660878200
我认为最后的额外数字可能会导致400,但我不知道为什么它被附加到网址上。如果您导航到上面的网址,结果会在浏览器中正确显示。
在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状态。
答案 0 :(得分:3)
我修好了!
将此添加到我的HTML文件中。
<meta charset="UTF-8" name="referrer" content="no-referrer">
答案 1 :(得分:0)
只是抬头 - 我有几个项目(Java和JavaScript)调用此API。它们通常可以正常工作,但偶尔会因400 而无法对代码进行任何更改 - 然后在几小时/几天后再次工作,而无需更改代码。我认为如果服务器出现问题,它可能会返回500而不是500范围内的正确错误(服务器错误 - 这是我,不是你)
400范围内的错误应该是来自服务器的消息,条件是“它是你,而不是我 - 在你再次发送之前修复你的请求”,但我不认为这是这个API的情况。 / p>
例如 - 我的一个有效但无效的请求确实有效,然后没有:
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>
简而言之 - 可能是他们不是你!