【问题标题】:Jsonp request using jquery to fetch bing web results使用 jquery 获取 bing web 结果的 Jsonp 请求
【发布时间】:2026-01-10 15:50:02
【问题描述】:

以此为指导:http://msdn.microsoft.com/en-us/library/dd250846.aspx

有人可以帮我处理 jquery 调用吗?

我实际上是传入回调的 javascript 代码,还是只传入函数的名称?

BingSearch = function($bingUrl, $bingAppID, $keyword, $callBack) {

        $bingUrl = $bingUrl + "?JsonType=callback&JsonCallback=" + $callBack + "&Appid=" +                  $bingAppID + "&query=" + encodeURI($keyword) + "&sources=web";


$.ajax({
            dataType: 'jsonp',
            jsonp: $callBack,
            url: $bingUrl,
            success: function(data) {
                alert('success');
                $callBack(data);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert("error: " + textStatus);
            }
        });

};

更新

好的,所以我将其更改为:

BingSearch = function(bingUrl, bingAppID, keyword, callback) {

    var url = bingUrl + "?method=?&JsonType=callback&Appid=" + bingAppID + "&query=" + encodeURI(keyword) + "&sources=web";

    $.getJSON(url, callback);

};

这样称呼它:

BingSearch(url, appid, searchkeyword, function(searchresults) {

    alert('yes!');
};

仍然收到“无效标签”错误。

【问题讨论】:

    标签: javascript jquery json jsonp bing


    【解决方案1】:

    要将 do jsonp 与 jQuery 一起使用,请将 JsonCallback=UserCallback 替换为 JsonCallback=?。然后 jQuery 会像处理普通的 $.ajax() 请求一样处理它。

    我建议从 $.getJSON() 开始以习惯 Bing API,然后在您准备好将其与您的应用程序集成时再回到 $.ajax()

    使用Bing API docs中的示例:

    var apikey = 'YOUR_API_KEY';
    var url = 'http://api.bing.net/json.aspx?AppId='+apikey+'&Version=2.2&Market=en-US&Query=testign&Sources=web+spell&Web.Count=1&JsonType=callback&JsonCallback=?';
    $.getJSON(url, function(data) { console.log(data); });
    

    【讨论】:

      【解决方案2】:

      jsonp: 需要设置成字符串(我觉得也可以省略),因为这只是动态创建的用于接收 JSONP 的函数的名称。

      但是形参$callBack需要是一个函数的引用,所以要么你用

      function callback(result){ /*processResultHere*/ }
      
      BingSearch(..,..,.., callback);
      

      BingSearch..,..,.., function(result){ /*processResultHere*/ });
      

      正如你所知,过度使用 $ 真的伤害了我的眼睛 :)

      此外,以大写字母开头的函数名应保留给“类”,因为许多语法检查器会抱怨调用大写字母的函数而前面没有 new..

      【讨论】:

      • 是的 $callBack 是对函数的引用(像您在第二个代码 sn-p 中介绍的匿名函数)。仍然收到“无效标签”错误,它说“无效标签”从 bing 中吐出 json 响应(在萤火虫中)
      • 但是您是否修改了您的jsonp: 属性?在您的代码中,您将其设置为函数引用,而需要将其设置为字符串。
      • 如果你使用 HttpFox 之类的监控流量,那么你应该看到用于脚本请求的 url 的格式为 http://....&callback=[namefrom jsonp]跨度>
      • invalid label 与运行 `eval({"prop":"value"});因为 {} 被解释为块语句而不是对象文字。听起来 jQuery 在评估它之前没有将它包装在 () 中。