2011-03-01 7 views
1

私は現在、イントラネットアプリケーション内のいくつかのフォームフィールドの直接変換を提供するためにGreaseMonkeyユーザースクリプトを開発中です。jQuery、JSON-P、Google翻訳:さまざまなエラー

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 
}); 

ここに私の問題です:

  • これはクロスドメインリクエストであると私はJSONPを使用するように強制しています、私はこのコードを使用したGoogle翻訳のAPIを呼び出すまで

    すべてがOKになり。これを行うために、URLの末尾に&callback=?という文字列を追加しました。 getJSONコールバックは発生しません(ただし、応答データが正確である)、と私はFirebugのコンソールでこのエラーを取得:

jsonp1298988446807が定義されていないが

  • 私が使用している場合&callback=foo代わりに、私の要求はもはやPOSTではなく、完了しませんが(ネットワークパネルで)表示されます(ネットワークパネル内)

    OPTIONS request_url 405 Method Not Allowed

  • 私はコールバックとして指定するカスタム関数を作成する場合、それは(それが唯一それが動作するかどうかをチェックするために、アラートが含まれています)関数が呼び出されていないのいずれかとして動作しません。

誰もが、これは動作しませんなぜわずかなアイデアを持っている場合、私は(多分それは^^役立つだろう)、壁に頭を強打するこの近くだから、私を助けてください。

ありがとうございました。


EDIT:Scooblerのおかげで、私は少しさらに行ってきたと信じていました。

:彼のコードを使用して、私はより多く /ignore

^^私のスクリプトからの要求は、Firebugののネットワーク]タブに表示されない、と警告によって与えられた応答がある何かを得ることができました

応答テキスト:

ステータスが返さ未定義:エラー

エラースロー:エラースロー:[例外... nsresult "コンポーネントが利用できない": "0x80040111(NS_ERROR_NOT_AVAILABLE)" 場所:「JSフレーム::ファイル:/// C:/ Documents%20and%20Settings/username/Applicatio n%20Data/Mozilla/Firefox/Profiles/jmbr7ut9.default/extensions /%7Be4a8a97b-f2ed-450b-b12d-ee​​082ba24781%7D/components/greasemonkey。JS ::匿名::ライン396" のデータ:平均時間はありません]

、私は自分自身で研究を続け、完全なウォークスルーhereで、クロスドメインリクエストのためのGreaseMonkeyのjQuery /橋を渡って来ました(this postから)が、これは、私はjQueryのは、何のようなユニークなコールバックの名前を与える代わりに、短いコードで.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"); 
}); 

を完全修飾.ajax()コールを使用してみますScooblerのスクリプト

答えて

0

実際、GreaseMonkey APIには、クロスドメイン要求を許可する機能があります。 [mirror]です。

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

0

よりも正確に同じエラーが表示されますあなたが見たjsonp1298988446807、それはまた正常な.ajax()成功/失敗/完全なコールバックフックを使用できるように関数を定義します。

別もう少しダイナミックな例があります例here

を参照してください:here(代わりに英語にフランス語をした上でコードの英語からフランス語に翻訳)

+0

あなたの考えは正しいと思いますが、リクエストは開始されません。私のコードでエラーを確認します – 3rgo

+0

@ Squ36上記のコードをコピー&ペーストした場合、成功のコールバックの最後に '}'がありませんでした。残念です!私はまた、動作していない場合、いくつかの光を放つのを助けるかもしれないエラーコールバックを含んでいます。 '.ajax()'と '.ajaxStop()'の2つのエキストラ '.ajaxStart()'は、 '.ajax()'関数の起動と停止を警告します。 – Scoobler

+0

私はあなたのコードを試しました、それは動作するはずですが、私はOPをエラーを表示するように更新します。 – 3rgo

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); 
    } 
}); 

DEMOを参照してください。

関連する問題