我在尋求一些幫助和解釋,因爲我只是困惑。如何使用ajax執行搶先式REST調用?
我有一個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);
},
});
我得到的錯誤是「No」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一起工作?
感謝您的快速回答。另一方面,我敢打賭,你是100%正確的,我不喜歡它:)事情是,在早上我想到了同樣的解決方法(代理請求),然後決定發佈一個問題在stackoverflow得到更好,更短,更簡單的解決方案......我會嘗試另一種方式 –