因此,我们在rails项目中有了这个HTTP请求调用,它运行良好,一切都很好。它调用控制器方法并从该控制器返回值(在本例中将为"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,并带有gem wicked-pdf。在努力解决这个问题之后,由于Wicked PDF将JavaScript转换为一些本地文件,并且我们在调用控制器方法时遇到了问题,由于CORS,现在我们成功地调用了具有cookie的控制器方法。所以,这个方法是被调用的,但是,在正常情况下,就像我在开头所说的,responseText是空的,因为它正确地构建了。
所以,请求是可以的,正在到达控制器方法,并且正在做所有的事情,但显然这不起作用:
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,这是返回,所以显然没有错误。那么,这个请求怎么能访问控制器方法,做所有事情,却什么也没有返回呢?
发布于 2020-01-24 20:50:21
您是否尝试过使用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://stackoverflow.com/questions/59895869
复制相似问题