XMLhttprequest返回空的responseText和readyState == 4(WickedPF)

问题描述 投票:0回答:1

所以我们在rails项目中有了这个httprequest调用,它运行良好,一切都很好。它调用控制器方法,并从该控制器返回值(在这种情况下将为“ true”或“ false”)

var httpRequest;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
      try {
        httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e) {
        try {
          httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {}
      }
    }
    if (!httpRequest) {
      alert('Giving up :( Cannot create an XMLHTTP instance');
      return false;
    }
    httpRequest.open('GET', url);
    httpRequest.withCredentials = true;
    httpRequest.responseType = 'text';
    // httpRequest.setRequestHeader('Content-type', 'application/json');
    httpRequest.onreadystatechange = function(){
      $container.find('h4').html(JSON.stringify("Error"));
      if (httpRequest.readyState === 4) {
        $container.find('h4').html(JSON.stringify(httpRequest.response));
        // $container.find('h4').html(JSON.stringify("SUCCESS"));
      }
    };
    httpRequest.send();

现在,我们要将其导出为pdf,并将其导出为wicked-pdf。经过几天的努力,由于wicked pdf将javascript将javascript转换为一些本地文件,并且由于CORS,我们在调用controller方法时遇到了问题,现在我们成功地调用具有cookie的controller方法。因此,调用了该方法,但是,在正常情况下(如我在开头所述),responseText为空,这不是因为它正确地构建了html。

所以,请求没问题,正在进入控制器方法,并且正在做所有事情,但是显然这是行不通的:

render :json => @status, :layout => false

而且我不知道为什么,我在这方面搜索了很多,我陷入了困境。为什么这在正常项目中起作用,但是当尝试从本地文件执行所有这些操作时,尽管没有给出任何错误,但它没有提供,但是来自rails的日志是:

INFO -- : Started GET "/monitor/devicestatus_alarms/30" for ::1 at 2020-01-24 09:22:18 +0000
INFO -- : Processing by MonitorController#devicestatus_alarms as JSON
INFO -- :   Parameters: {"id"=>"30"}

INFO -- : Completed 200 OK in 45ms (Views: 0.2ms | ActiveRecord: 18.3ms)

我试图增加javascript-delay,因为可能需要更多时间在控制器中进行计算,但什么也没有。 responseText仍然为空。另外,我们正在检查http status == 200,但是随后发现对于本地文件,当它成功执行时,它始终返回状态4(正在返回),因此显然没有错误。那么,该请求如何访问控制器方法,执行所有操作并什么都不返回呢?我要说实话很难,希望有人可以帮我澄清一下。非常感谢。

javascript ruby-on-rails http wicked-pdf responsetext
1个回答
0
投票

您是否尝试过使用AJAX调用来完成这项工作?

$.ajax({
  url: "<your_url>",
  type: 'GET',
  dataType: 'text',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  }
}).then(function (data) {
  < actions here >
  }
}).always(function () {
  < always action here>
});
© www.soinside.com 2019 - 2024. All rights reserved.