首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLhttprequest返回空responseText和readyState == 4 (WickedPF)

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

Stack Overflow用户
提问于 2020-01-24 19:49:25
回答 1查看 129关注 0票数 0

因此,我们在rails项目中有了这个HTTP请求调用,它运行良好,一切都很好。它调用控制器方法并从该控制器返回值(在本例中将为"true“或"false")

代码语言:javascript
复制
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,并带有gem wicked-pdf。在努力解决这个问题之后,由于Wicked PDF将JavaScript转换为一些本地文件,并且我们在调用控制器方法时遇到了问题,由于CORS,现在我们成功地调用了具有cookie的控制器方法。所以,这个方法是被调用的,但是,在正常情况下,就像我在开头所说的,responseText是空的,因为它正确地构建了。

所以,请求是可以的,正在到达控制器方法,并且正在做所有的事情,但显然这不起作用:

代码语言:javascript
复制
render :json => @status, :layout => false

我不知道为什么我搜索了这么多关于这个的东西,我有点被卡住了。为什么这在普通项目中是有效的,但是当试图从本地文件执行所有这些内容时,虽然没有给出任何错误,但rails的日志如下:

代码语言:javascript
复制
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,这是返回,所以显然没有错误。那么,这个请求怎么能访问控制器方法,做所有事情,却什么也没有返回呢?

EN

回答 1

Stack Overflow用户

发布于 2020-01-24 20:50:21

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

代码语言:javascript
复制
$.ajax({
  url: "<your_url>",
  type: 'GET',
  dataType: 'text',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  }
}).then(function (data) {
  < actions here >
  }
}).always(function () {
  < always action here>
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59895869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档