web-dev-qa-db-ja.com

JQuery AJAXヘッダー認証POST

[〜#〜] xml [〜#〜]Authorization headerとともにサーバーに送信する必要があります[〜#〜] must [〜# 〜] be [〜#〜] post [〜#〜]になります。

今、私には2つの選択肢があります。

  1. DataType = 'jsonp'を使用すると、POSTではなく常にGETになります。また、私のデータはXMLでなければなりません。

            var request = {};
            request.type = 'POST';
            request.contentType = 'application/jsonp; charset=utf-8';
            request.dataType = 'jsonp';
            request.data = JSON.stringify(this.data);
            request.url = this.url;
            request.beforeSend = function (xhr) {
                xhr.setRequestHeader("Authorization", "Basic ");
            };
    
            request.processData = false;
            $.ajax(request);
    
  2. しかし、dataType = 'jsonp'がないと、Authenticationヘッダーがまったくありません。次のコードはChromeでのみ機能します。

        var request = {};
        request.type = 'POST';
        request.contentType = 'text/xml';
        request.dataType = 'xml';
        request.data = this.data;
        request.url = this.url;
        request.beforeSend = function (xhr) {
            xhr.setRequestHeader("Authorization", "Basic ");
        };
    
        request.processData = false;
        $.ajax(request);
    

はい、私はStackOverflowに同様の質問がたくさんあることを知っています。それらの質問を何十通も読んだのですが、それでも正しい答えが見つかりません。

10
user3392045

beforeSendメソッドのヘッダーを変更します。次に例を示します。

$.ajax({
    url: url,
    method: "POST",
    dataType: "json",
    crossDomain: true,
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(data),
    cache: false,
    beforeSend: function (xhr) {
        /* Authorization header */
        xhr.setRequestHeader("Authorization", "Basic " + Utils.getUsernamePassword());
        xhr.setRequestHeader("X-Mobile", "false");
    },
    success: function (data) {

    },
    error: function (jqXHR, textStatus, errorThrown) {

    }
});
13
vivek shaushi