1

これをガイドとして使用する: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!');
};

それでも「無効なラベル」エラーが発生します。

4

2 に答える 2

4

do jsonpをjQueryで使用するには、JsonCallback=UserCallbackをに置き換えJsonCallback=?ます。その後、jQueryは通常の$.ajax()リクエストのように処理します。

$.getJSON()まず、Bing APIに慣れてから$.ajax()、アプリケーションと統合する準備ができたらに戻ることをお勧めします。

Bing APIドキュメントの例を使用すると:

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); });
于 2010-05-14T14:26:27.490 に答える
1

jsonp:文字列に設定する必要があります(これは省略できると思います)。これは、JSONPを受信するために動的に作成された関数の名前にすぎないためです。

ただし、仮パラメータ$ callBackは関数への参照である必要があるため、次のいずれかを使用します。

function callback(result){ /*processResultHere*/ }

BingSearch(..,..,.., callback);

また

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

そして、あなたがそれを知っているように、$の過度の使用は本当に私の目を傷つけます:)

また、大文字で始まる関数名は「クラス」用に予約する必要があります。これは、多くの構文チェッカーが、大文字newを前に付けずに呼び出された関数について文句を言うためです。

于 2010-05-14T13:55:26.490 に答える