使用javascript客户端

时间:2016-03-29 13:00:30

标签: rest delphi datasnap

尝试使用简单的javascript客户端测试新的datasnap服务器。它一直工作,直到我打开服务器上的授权,然后我不断收到401错误,onAuthorization事件没有传入任何用户名或密码,他们总是空白。

$(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");
}
  });

});

3 个答案:

答案 0 :(得分:0)

在您引用的来源中,您禁止(注释掉)授权部分

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

您能在客户端和服务器之间显示真实的HTTP流量日志吗?

实际上有两个日志 - 服务器和经过身份验证的Delphi客户端之间 - 以及服务器和失败的JS客户端之间。然后就会看到差异......

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

答案 1 :(得分:0)

没有解决,花了很长时间试图解决这个问题。最后只需要一个测试客户端,并得到一个工作的PHP客户端非常快。看起来如此接近但从来没有完全确定,但足以保持goin thanx无论如何

答案 2 :(得分: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;
相关问题