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

所以我们在rails项目中有这个HTTP请求调用,它运行良好,一切都很好。它会调用controller方法并从该控制器返回值(在这种情况下将为“ 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转换为一些本地文件,并且由于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(正在返回),因此显然没有错误。那么,该请求如何访问控制器方法,执行所有操作并什么都不返回呢?

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

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

$.ajax({
  url: "<your_url>",type: 'GET',dataType: 'text',crossDomain: true,xhrFields: {
    withCredentials: true
  }
}).then(function (data) {
  < actions here >
  }
}).always(function () {
  < always action here>
});
本文链接:https://www.f2er.com/2718714.html

大家都在问