向Yahoo Finance API发送JSONP请求时获取400错误请求

时间:2016-05-07 23:03:24

标签: javascript json jsonp yahoo-api yahoo-finance

我希望有一个输入字段,可以在用户输入字母时提示股票行情,就像您在雅虎或Google财经上看到的那样。我不能只使用JSON,除非我启用CORS,在这种情况下它可以工作。这个代码是我在研究我面临的问题时从Stack Overflow(herehere)中发现的各种问题拼凑而成的。

$("input#stocklookup").autocomplete({
    source: function(request, response){
        $.ajax({
            url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query='+request.term+'&region=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&region=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+'&region=US&lang=en-US',
            cache: true, //<--new
            dataType: 'jsonp',
            jsonpCallback: 'YAHOO.util.ScriptNodeDataSource.callbacks'
        });

        YAHOO = {
            util: {
                ScriptNodeDataSource: {
                    callbacks: function(data) {
                        console.log(data);
                    }
                }
            }
        };

这适用于某些请求但不适用于其他请求,有些仍然返回400状态。

2 个答案:

答案 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>

简而言之 - 可能是他们不是你!