所以我们在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(正在返回),因此显然没有错误。那么,该请求如何访问控制器方法,执行所有操作并什么都不返回呢?