Итак, у нас есть этот запрос HTTP-запроса в нашем проекте rails, который работает хорошо, все в порядке. он вызывает метод контроллера и возвращает значение из этого контроллера (в данном случае это будет "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 с гемом нечестивый-PDF. После борьбы с этим, поскольку Wicked PDF преобразует JavaScript в некоторые локальные файлы, и у нас были проблемы с вызовом метода контроллера, из-за CORS, теперь мы успешно вызываем метод контроллера, имеющий cook ie. Итак, метод вызывается, но responseText пуст, когда в нормальных условиях, как я говорил в начале, это не так, поскольку он правильно строит HTML.
Итак, запрос в порядке, доходит до метода контроллера и все делает, но, видимо, это не работает:
render :json => @status, :layout => false
, и я не знаю, почему я ' Я много об этом искал, и я застрял. Почему это работает в обычном проекте, но при попытке выполнить все это из локальных файлов, это не так, хотя и не дает никаких ошибок, журналы с рельсов таковы:
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, потому что может потребоваться больше времени для выполнения вычислений в контроллере, но ничего. responseText по-прежнему пуст.
Кроме того, мы проверяли статус HTTP == 200, но затем мы обнаружили, что с локальными файлами при успешном завершении всегда возвращается статус 4, который, по-видимому, возвращается нет ошибок Итак, как этот запрос может получить доступ к методу контроллера, сделать все и вернуть ничего?