2

このコードに問題があり、動作させることができないようです。この呼び出しで返される典型的なエラーは、「リソースの読み込みに失敗しました: サーバーは 401 (未承認) のステータスで応答しました」です。

$('#btnZendesk').click(function () {
      $.ajax({
          url: "https://flatlandsoftware.zendesk.com/api/v2/topics/22505987.json",
          type: 'GET',
          crossDomain: true,
          xhrFields: {
              withCredentials: true
          },
          cache: false,
          dataType: 'jsonp',
          processData: false,
          data: 'get=login',
          timeout: 2000,

          username: "test@test.com",
          password: "test",
          success: function (data, textStatus, response) {
              alert("success");
          },
          error: function (data, textStatus, response) {
              alert(data);
          }
      });
4

2 に答える 2

6

問題は、アクセスしようとしているリソースが基本認証で保護されていることです。

jQuery コールバックで使用beforeSendして、認証の詳細を含む HTTP ヘッダーを追加できます。

beforeSend: function (xhr) {
  xhr.setRequestHeader ("Authorization", "Basic XXXXXX"); 
}

または、jQueryを使用してそれを行うことができますajaxSetup

$.ajaxSetup({
  headers: { 'Authorization': "Basic XXXXX" }
});

編集

言及された機能へのいくつかのリンク

編集2

Authorization ヘッダーは次のように構成されます。

  • ユーザー名とパスワードは文字列に結合され"username:password"、結果の文字列はBase64を使用してエンコードされます

例:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
于 2013-01-15T15:26:58.960 に答える
0

私もこの問題を抱えており、インターネットからのすべてのソリューションが失敗したか、クライアント Web サービスの制限 (JSONP、XDR、CORS=true) のために適用できませんでした。

このために、クライアントのサーバーにあるページに iframe を追加しました。したがって、データを iframe に投稿すると、iframe はそれを Web サービスに投稿します。したがって、クロスドメイン参照は排除されます。

許可されたページのみが iframe との間でデータを投稿することを確認するために、双方向のオリジン チェックを追加しました。

それが役に立てば幸い

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}
于 2014-12-17T17:07:36.770 に答える