【发布时间】: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