【问题标题】:XMLhttprequest returning empty responseText and readyState == 4 (WickedPF)XMLhttprequest 返回空 responseText 和 readyState == 4 (WickedPF)
【发布时间】:2020-01-24 11:49:24
【问题描述】:

所以我们在 Rails 项目中有这个 HTTP 请求调用,它运行良好,一切都很好。它调用控制器方法并从该控制器返回值(在这种情况下将是“真”或“假”)

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();

现在,我们要使用 gem wicked-pdf 将其导出为 pdf。在解决了这个问题之后,由于 Wicked PDF 将 JavaScript 转换为一些本地文件,并且我们在调用控制器方法时遇到了问题,因为 CORS,现在我们成功地调用了具有 cookie 的控制器方法。因此,调用了该方法,但是在正常情况下 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 状态 == 200,但后来我们发现对于本地文件,当它成功时,它总是返回一个状态 4,它正在返回,所以显然没有错误。那么,这个请求如何访问控制器方法,什么都做,什么都不返回呢?

【问题讨论】:

  • JSON.stringify() 带有字符串 (.html(JSON.stringify("Error")))? o.O
  • 嗯,是的,它没有意义,但是在我们打印对象之前,我们忘记更改它,但这并不重要,也没有任何影响,这不是问题,也不是与问题有关,但是是的,谢谢你指出来。

标签: javascript ruby-on-rails http wicked-pdf responsetext


【解决方案1】:

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

$.ajax({
  url: "<your_url>",
  type: 'GET',
  dataType: 'text',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  }
}).then(function (data) {
  < actions here >
  }
}).always(function () {
  < always action here>
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
相关资源
最近更新 更多