我正在寻求一些帮助和解释,因为我很困惑。
我有一个 jQuery 函数,它使用 ajax 对某个服务器进行 POST 调用。
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 做同样的事情时,使用 jersey 客户端它工作得很好,使用 wiztools.org 的 rest 客户端也一样(必须勾选选项抢占式)
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);
那么有人能告诉我为什么它适用于 java 和 jersey 而不是 jquery 和 ajax 吗?如何使它最终与 ajax 一起工作?