Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不进行AJAX/JS调用_Javascript_Ruby On Rails_Ajax_Wicked Pdf - Fatal编程技术网

Javascript 不进行AJAX/JS调用

Javascript 不进行AJAX/JS调用,javascript,ruby-on-rails,ajax,wicked-pdf,Javascript,Ruby On Rails,Ajax,Wicked Pdf,我目前正在使用JS和Ajax请求来编辑一些HTML标记,具体取决于某些控制器方法的结果。在我想要生成PDF之前,这些都可以正常工作。我一直在做一些研究,并使用javascript\u delay和窗口状态找到了一些“解决方案”,但没有成功 按照wkhtmltopdf的指导,我正在使用wicked\u pdf\u javascript\u include\u标记来加载JS文件,并且正在编写和保存该文件,但是我不知道是否正在执行javascript,因为在.JS文件的AJAX部分生成了“可视”部分,

我目前正在使用JS和Ajax请求来编辑一些HTML标记,具体取决于某些控制器方法的结果。在我想要生成PDF之前,这些都可以正常工作。我一直在做一些研究,并使用javascript\u delay窗口状态找到了一些“解决方案”,但没有成功

按照wkhtmltopdf的指导,我正在使用wicked\u pdf\u javascript\u include\u标记来加载JS文件,并且正在编写和保存该文件,但是我不知道是否正在执行javascript,因为在.JS文件的AJAX部分生成了“可视”部分,而该部分在pdf中没有显示

控制器正在返回一个完整的HTML,我希望在HTML容器中显示该HTML:

$.ajax({
  url: "/monitor/device/"+widget.property.device_sensor,
  type: 'GET',
  dataType: 'html'
}).done(function (datos) {
  $container.html(datos);
}).always(function () {
  redBorder.widgets.util.reloadDone($container.parents('.widget'));
});
这是在Rails中使用GEMwkhtmltopdf


我如何知道JS正在执行,如果它正在执行,问题是AJAX调用如何解决?

在使用
wicked pdf
进行渲染时,页面会保存到磁盘上的临时文件中,并通过
文件://
协议打开。结果是页面对您的服务器地址一无所知,即使它知道了,它也会有不同的来源,这在默认情况下会阻止ajax调用(需要设置CORS来绕过它)


对于PDF,最好不要使用ajax调用,因为显然不会有用户交互,而是在视图中呈现所有必要的数据。

尝试以下方法:

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.onreadystatechange = function(){
      if (httpRequest.readyState === 4) {
        /do stuff
      }
    };
    httpRequest.send();

这将用纯javascript替换ajax调用。希望这能有所帮助,Pedro。

谢谢您的回复Frank,我已经尝试过了,但是没有成功,因为控制器和XMLHttpRequest之间仍然存在一些通信错误。这显然是用cookie解决的,但我们没有收到控制器返回的信息。有关更多信息,请参见此: