1

私はプログラミングの経験がありますが、GS、JS、または UI に関連するものはまったく初めてです。

シナリオ: Greasemonkey スクリプトからサーブレットへの AJAX 呼び出しを行う

Greasemonkey/JS コード:

function getResultsData(query){
alert("Getting the Data");
$.ajax( 
    {
    cache: false,   
    data: {"q":query},      
    dataType:"text",
    url: "http://myserver.com:8000/search?",
    success: processData        
    }); //end of $.ajax }

function processData(data){
alert("Got the data");
var myResultDiv = document.getElementById("searchRes");
myResultDiv.innerHTML = data; }

サーブレット コード:

        System.out.println("-----------This is an AJAX call------------------");
        //Commented the original logic
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write("Text from Servlet");

問題:

  • URL ($.ajax 内) が他の既存の API である場合、GS/JS コードは完全に機能します。応答が UI に反映される

  • ただし、サーバーの URL を指定すると、Firebug.Console で、その呼び出しに対する HTTP 応答がないことを確認できますが、ステータスは 200 OK で、エントリ全体が「赤」になっています。

  • Firebug の「http コール エントリ」からコピーした URL をテストすると、新しいタブに「サーブレットからのテキスト」という応答が表示されるため、完全に機能しています。

誰か助けてください。

:グリースモンキーが実行されている Web サイトと、私のサーバーは同じドメインに属しています。

グリースモンキーのウェブサイト: wwww.example.com

私のサーバー: www.myserver.example.com

4

1 に答える 1

2

@mattedgod に感謝します。彼のコメントは、私がさらに調査するきっかけとなり、答えを見つけました。

次のスニペットを追加して機能させます。

response.setHeader("Access-Control-Allow-Origin", "*");

驚いたことに、自分のサーバーの完全な http アドレスをヘッダーに明示的に指定すると機能しません。理由はまだわかりません。

于 2012-06-29T23:25:35.323 に答える