1

私のWebサービスは、次のようなJSONオブジェクトを返します

["abc","xyz","option_3"]

つまり、このアドレスを chrome ブラウザhttp://localhost:8088/rest/getOptionsに入力すると、上に表示されます。

ドロップダウンオプションを作成できるように、ブラウザでこれを読み取ろうとしています...しかし、以下のコードからは何も得られません:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript">
        url="http://localhost:8088/rest/getOptions";
        var ajaxResult = null;
        function getData(yt_url){
            $.ajax
            ({
                type: "GET",
                url: yt_url,
                dataType:"json",
                async: false,
                success: function(response){
                    ajaxResult = response;
                }
            });
        }
        getData(url);

    alert(ajaxResult);

    </script>
</head>
<body>
</body>
</html>

私はいつもnullアラートボックスに入ります。Web サービスの要求/応答が正常に行われていることを fiddler2 で再確認しました。Web サービスとブラウザーの間で json オブジェクトをインターセプトすることもできます。

私も試しました

var obj = JSON.parse(ajaxResult);
alert(obj);

私は再びnullになります。

私はすでにjson応答のAjax呼び出しと同様の質問を見てきました。私のJSONは少し違うので、私の場合はこれらの解決策が適用されないか、従わなかったかのどちらかです。

私は AJAX と Java スクリプトを初めて使用します。アドバイスをお願いします。

編集: このrest / getOptionsエンドポイントを提供するJERSEY Webサービスコードを追加

@GET
@Path("getOptions")
@Produces(MediaType.APPLICATION_JSON)
public List<String> getOptionsJson() {
    //build alloptions List<String>
    return alloptions ;
}
4

1 に答える 1

2

アップデート

質問を編集しました。dataType: 'json'同じドメインでプロキシを使用するかCORSを介してのみ克服できるクロスドメインの問題のため、使用できません。

使用するときは使用dataType: 'jsonp'できませんasync: false。これはXMLHttpRequest<script>タグを実際に使用するのではなく、クロスドメインにするために使用するためです。jQueryasyncは警告を出さずに設定を無視すると思います。

したがって、alert()は常に空であり、成功のコールバック内に移動する必要があります。

JSONP をサポートするには、Web サービスは返されたデータを関数呼び出しにラップする必要があります。GETcallbackパラメーターで識別されます。

callback([1, 2, 3])

前述のように、Web サービスがこれをサポートしていない場合は、CORSを使用する必要があります。たとえば、次の応答ヘッダーを追加します。

Access-Control-Allow-Origin: *
于 2013-04-12T02:43:54.243 に答える