2

私はこれを解決しようとして 3 日間戦ってきましたが、「Google の過負荷」が発生しました - 助けていただければ幸いです。

Jenkins ビルド サーバーが配置されてhttp://jenkinsBuild.mycompany.com:8080いるので、この URL をブラウザーに入力すると...

http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result

...ブラウザのページが表示されます...

{"result":"SUCCESS"}

現在、Jenkins Wikiによると、「Jenkins はマシンで消費可能なリモート アクセス API をその機能に提供しています」REST API を介して json と jsonp をサポートしており、同じオリジン ポリシーの問題を回避できるはずです。

私は(最新のChromeブラウザを使用して)同じjsonコンポーネントを取得しようとしています{"result":"SUCCESS"}

$.getJSON()以下に説明するように、呼び出しで HTML/javascript を使用しています。HTML ファイルは現在、私のローカル マシン上にありますが、最終的には wiki 上に存在することになるでしょう。3 つの URL のコンソール出力は、コードの後に​​リストされています。

URL をブラウザに直接入力して取得したのと同じ json 結果を取得するにはどうすればよいですか? ご協力いただきありがとうございます。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var url1 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result";
    var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=?";
    var url3 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?callback=?&tree=result";

    $('button').click(function(){
        $.getJSON(url1, function(json) {
            $("#reply").append("got callback: " + json);    
        });
    });
});
</script>

</head>
<body>

<button>Get Jenkins</button><br />

<div id="reply">

</div>

</body></html>

3 つの URL のコンソール出力...

url1 -> XMLHttpRequest cannot load http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result. Origin null is not allowed by Access-Control-Allow-Origin.

url2 -> Uncaught SyntaxError: Unexpected token : json:1

url3 -> Uncaught SyntaxError: Unexpected token : json:1

4

2 に答える 2

1

更新しました:

Url1 は、コールバックを指定していないため、有効な jsonp 呼び出しではありません。url2 と url3 が失敗する理由がわかりません。

コールバック関数名を手動で指定する別の方法を次に示します。

var url2 = "http://jenkinsBuild.mycompany.com:8080/view/my_view/job/build_me/123/api/json?tree=result&callback=my_local_javascript_function";

my_local_javascript_function は、呼び出し元のブラウザーの JavaScript コード内の関数です。何が起こるかというと、サーバーは次のようなスクリプトで応答します。

my_local_javascript_function({ //json object in here });

その関数は、ローカル ブラウザーで使用可能である必要があり、実行されます。JSONP の詳細については、http: //en.wikipedia.org/wiki/JSONPを参照してください。

于 2013-10-05T15:21:58.200 に答える