javascript - 将 DHIS 2 API 与 Jquery 跨域问题一起使用

标签 javascript jquery ajax api cross-domain

我正在尝试实现一个使用 DHIS 2 API 的 javascript 应用程序。我花了一整天时间尝试使用 Jquery 进行身份验证。

API 表示 ( https://www.dhis2.org/doc/snapshot/en/user/html/ch32s02.html ) 您需要使用 base 64 身份验证。我试图在 Jquery 中实现它,但遇到了跨域问题。我曾尝试使用 DHIS 2 演示 ( https://apps.dhis2.org/dev/ ) 进行身份验证,但没有成功。然后我在我的本地计算机上设置了一个本地副本,但我仍然遇到同样的问题,因为 DHIS 2 在不同的端口上运行。

我已经尝试过 jsonp 和 CROS,但都是徒劳的。

这是我目前正在尝试的代码

$(function(){
  var base_url = "http://apps.dhis2.org/demo/";
  var login = 'dhis-web-commons-security/login.action?authOnly=true';
  var current_user_url = 'api/users.json';
  var params = {
       'j_username':'admin',
      'j_password':'district'
 };


 function base_64_auth(user,password) { 
      var tok = user + ':' + password;
      var hash = Base64.encode(tok);
      return "Basic " + hash;
 }

 var auth = base_64_auth('admin','district');

 $.ajax({
      url : base_url+login,
     data : params,
     type : 'POST',
     dataType : 'text',
     crossDomain : true,
     xhrFields : {
          'withCredentials':true
     },
     beforeSend : function(req) {
          req.setRequestHeader('Authorization',auth);
     },
     success : function(data){
          console.log('authentification succeded');
          alert('success');
          //userInfo();
     },error : function(xhr,type,msg) {
          console.log(xhr.responseText);
          console.log(type);
          console.log(msg);
     }
 });

)};

我正在使用一个简单的 base64 编码库 www.webtoolkit.info/javascript-base64.html#.U9_O2XVdWkA

检查控制台我看到这个错误:

XMLHttpRequest 无法加载 http://apps.dhis2.org/demo/dhis-web-commons-security/login.action?authOnly=true。请求被重定向到 'http://apps.dhis2.org/demo/dhis-web-commons/security/login.action?failed=true',这是不允许跨域请求的需要预检。

如果有人曾经使用过该 API,我将不胜感激他的帮助,或者如果您知道任何其他方式(包括其他语言)我可以与 API 对话,我可能会去尝试。

非常感谢。

最佳答案

跨域请求通常会被浏览器拦截。我自己正在使用 DHIS2 API 作为小组项目的一部分,我们通过运行以下命令在 chrome 中禁用同源策略来解决这个问题:

google-chrome --disable-web-security

请注意,您仍然需要验证对演示服务器的请求,而且这个解决方案在任何方面都不是理想的。我猜最好的方法是在本地部署服务器并将所有文件放在服务器上,以便请求发生在与服务器相同的域中。另请注意,在 chrome 中禁用网络安全时,使用其他浏览器浏览邮件、facebook 等可能是个好主意。

关于javascript - 将 DHIS 2 API 与 Jquery 跨域问题一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126722/

相关文章:

php - 403禁止的错误-执行和Ajax页面

javascript - 将数据分组到单独的列表中

php - 使用 AJAX 和 PHP 更新表单字段

javascript - 在不卡住动画的情况下更改 css 线性渐变动画

javascript - 类型错误 : Cannot read property 'constructor' of undefined

javascript - 使用数组对项目进行排序

javascript - 动态地将类添加到另一个类的特定实例

javascript - jqmobi动态添加项目到页脚?

javascript - 离开网站后,AJAX 页面加载/history.pushState 无法正常工作

jquery - jquery load 方法是否提供与 Rails Replace_html 方法等效的 ajax 功能?