1

私は現在、GreaseMonkey ユーザー スクリプトを開発して、イントラネット アプリ内のいくつかのフォーム フィールドを直接変換できるようにしています。

このコードを使用して Google Translation API を呼び出すまで、すべて問題ありません。

var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=fr%7Cen&q=';
$.getJSON(apiurl+encodeURIComponent(text)+"&callback=?",function(data){
    alert('Translation Complete');
    //Change text
});

ここに私の問題があります:

  • これは Cross-Domain リクエストであるため、JSONP を使用せざるを得ません。そのために&callback=?、URL の末尾に文字列を追加しました。コールバックは起動されgetJSONませんが (ただし、応答データは正しい)、Firebug コンソールに次のエラーが表示されます。

jsonp1298988446807 は定義されていません

  • 代わりにa を使用すると&callback=foo、FF が気に入らないようです。リクエストが POST ではなくなったため、完了しませんが ([ネットワーク] パネルに) 表示されます。

    OPTIONS request_url 405 Method Not Allowed

  • コールバックとして指定するカスタム関数を作成すると、関数が呼び出されないため機能しません (機能するかどうかを確認するアラートのみが含まれます)。

これが機能しない理由が少しでもわかっている場合は、私を助けてください。私は壁に頭をぶつけそうになっているからです (多分助けになるでしょう ^^)。

ありがとう。


編集: Scoobler のおかげで、私はもう少し先に進んだと信じていました。彼のコードを使用して、スクリプトから a 以上のものを取得することができました/ignore^^

要求は Firebug のネットワーク タブに表示されず、アラートによって返される応答は次のとおりです。

応答テキスト: 未定義

返されたステータス: エラー

スローされるエラー: スローされるエラー: [Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Documents%20and%20Settings/username/Application% 20Data/Mozilla/Firefox/Profiles/jmbr7ut9.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee​​082ba24781%7D/components/greasemonkey.js :: 匿名 :: 行 396" データ: いいえ]

その間、私は自分で調査を続け、ドメイン間リクエスト用の jQuery/GreaseMonkey ブリッジに出くわしました。完全なチュートリアルはこちら(この投稿から) ですが、これは Scoobler のスクリプトとまったく同じエラーを示しています。

4

3 に答える 3

2

多分これを試してみてください - これはより冗長な構文.ajax()ですが、パラメータを自分でエンコードする必要はありません:

var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate';

var text = 'il fonctionne parfaitement';

$.ajax({
    url: apiurl,
    dataType: 'jsonp',
    data: {
        v: "1.0",
        langpair: "fr|en",
        q: text
    },
    success: function(data) {
        var translated = data.responseData.translatedText;
        alert('Translation Complete: ' + translated);
    }
});

デモを参照してください。

于 2011-03-01T15:18:02.317 に答える
0

実際、GreaseMonkey APIには、特別なパラメーターなしでクロスドメインリクエストを許可する関数があります [ミラー]

これを使用すると、スクリプトが即座に機能します。

于 2011-03-04T08:58:13.410 に答える
0

.ajax()短いコードの代わりに完全修飾呼び出しを使用してみます.getJSON()

var apiurl = 'https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=fr%7Cen&q=';
$.ajax({
    url: apiurl+encodeURIComponent(text),
    dataType: 'jsonp',
    success: function(data) {
        alert('Translation Complete');
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert("Response text: "+XMLHttpRequest.responseText);
        alert("Status returned: "+textStatus);
        alert("Error thrown: "+errorThrown);
    }
});

$.ajaxStart(function() {
    alert("Ajax Started");
});

$.ajaxStop(function() {
    alert("Ajax Finished");
});

jQuery はjsonp1298988446807のような一意のコールバック名を付け、関数も定義するため、通常の.ajax()成功/失敗/完全なコールバック フックを使用できます。

ここで例を見てください

もう少し動的な例がもう 1 つあります

于 2011-03-01T15:05:20.027 に答える