0

混乱しているだけなので、助けと説明を求めています。

ajaxを使用して、サーバーへのPOST呼び出しを行うjQuery関数があります。

var login = $("#email1").val();
var password = $("#password1").val();
var summary = $("#summary").val();
var details = $("#details").val();
var address = $("#address").val();
var str = login + ':' + password;
var credentials = utf8_to_b64(str);
function utf8_to_b64( str ) {
       return window.btoa(unescape(encodeURIComponent( str )));
       }
$.ajax({
        beforeSend: function (xhr) {
                   xhr.setRequestHeader("Authorization", "Basic " + credentials);
                   },
        crossDomain: true,
        //fails with or without next two arguments
        username: login,
        password:password,
        url: "https://blablablasomethingrelevant",
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        data: JSON.stringify({"fields":{properdatahere}}),
        async: false,
        success: function (data) {
                         alert(data);
                      },
        error: function (xhr, ajaxOptions, thrownError) {
             alert(xhr.status);
             alert(thrownError);
             alert(xhr.responseText);
             alert(xhr);
             },

             });

表示されるエラーは、「要求されたリソースに 'Access-Control-Allow-Origin' ヘッダーがありません」です。もちろん、私はそれをグーグルで検索しましたが、答えは常に「自己説明」のblablaエラーであり、サーバー側の障害であり、そこでいくつかのトリックを行う必要があるというものです。これらの答えは、他のすべてのテクノロジで同じ POST 呼び出しを実行できない場合に意味があります。

Javaでまったく同じことをしたとき、ジャージークライアントを使用してうまくいきました.wiztools.orgの残りのクライアントを使用しても同じです(オプションプリエンプティブをチェックする必要がありました)

Client client = Client.create();
client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(login, password));
WebResource webResource = client.resource("https://blablablasomethingrelevant");
String input = "{"fields":{properdatahere}";
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);

では、jquery と ajax ではなく、java と jersey で機能する理由を誰か教えてもらえますか? 最終的にajaxで動作させる方法は?

4

2 に答える 2