2016-03-29 45 views
1

嘗試使用簡單的javascript客戶端測試新的datasnap服務器。它的工作,直到我打開服務器上的授權,然後我不斷收到401錯誤,onAuthorization事件沒有傳入任何用戶名或密碼,他們總是空白。使用javascript客戶端進行Delphi Datasnap測試

$(document).ready(function(e) { 

var jsonStr = { 
"ContactName": "smith, anthony", 
"FirstName": "anthony", 
"LastName": "smith" 
    }; 


    function make_base_auth(user, password) { 
var tok = user + ':' + password; 
var hash = btoa(tok); 
return "Basic " + hash; 
    } 

    var userName = "admin"; 
    var password = "admin"; 
    var authStr = convertStringToBase64(userName + ":" + password); 
    var authObj = '{"authentication":authStr}'; 


    $.ajax({ 
url: "http://127.0.0.1:8086/api/services/Customers/RegisterCustomer", 
headers: { 
    "Authorization": make_base_auth(userName, password) 
}, 
beforeSend: function(xhr) { 
    xhr.setRequestHeader("Content-Type", "application/json"); 
    xhr.setRequestHeader("Accept", "application/json"); 
    //xhr.setRequestHeader ("Authorization", make_base_auth (userName, password)); 
}, 
crossDomain: true, 
type: "POST", 
dataType: "json", 
data: JSON.stringify(jsonStr), 

success: function(result, status, jqXHR) { 
    $("preerror").text("IT WORKED"); 
    var jsonStr = result; 
    var jsonObj = JSON.parse(jsonStr); 
    var jsonPretty = JSON.stringify(jsonObj, null, '\t'); 

    $("pre").text(jsonPretty); 
}, 
error(jqXHR, textStatus, errorThrown) { 
    $("pre").text("FAIL"); 
} 
    }); 

}); 
+0

嘗試標準的方法:使URL'HTTP://用戶名:密碼@服務器/路徑' –

回答

0

在你引用源你禁止(註釋掉)授權部分

//xhr.setRequestHeader ("Authorization", make_base_auth (userName, password)); 

你能告訴客戶機和服務器之間的實際HTTP流量日誌?

實際上兩個日誌 - 服務器和工作認證的Delphi客戶端之間 - 以及服務器和失敗的JS客戶端之間。那麼就可以看出區別....

https://stackoverflow.com/a/17549592/976391

0

沒有解決,花了waaaay太長試圖解決這一個。最後只需要一個測試客戶端,並得到一個工作的PHP客戶端非常迅速。似乎如此接近卻從來沒有做過不完全肯定,但有足夠的保持布萊恩感謝名單反正

0

儘量把這個webmodule

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
begin 
    Response.SetCustomHeader('access-control-allow-origin','*'); 
    if FServerFunctionInvokerAction <> nil then 
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker; 
end;