在Asyncronous请求中打开带有发布请求的新窗口

时间:2016-06-16 09:22:18

标签: javascript php jquery

我需要向一个为我创建PDF的页面发送Async POST请求。

我有一个收集数据的PHP页面,然后发送一个异步(jQuery)触发器来处理数据并将其转换为JSON,然后再将其发送到另一个PHP页面,始终处于异步模式。

现在的问题是,我正在尝试使用window.open打开一个创建实际PDF的本地页面并将其返回给浏览器。

然而,window.open()什么都不做,调试控制台没有显示任何错误。

应该打开新窗口的代码:

$_POST['ddt_data'] = $_SESSION['$refinedJSON']; ?>
<script>window.open("ddt_creation.php");</script>
<?php

我试图打开一个空白的窗口,没有任何变化。窗口没有打开。我没有激活广告块。

编辑1:

我已根据以下评论中的建议更改了代码。新代码现在是:

$_POST['ddt_data'] = $_SESSION['$refinedJSON'];
echo "BLAM"; ?>    
<script>alert(1); window.open("http://192.168.1.220/var/www/html/DDT_creation.php");</script>
<?php

我可以在为异步请求准备的返回部分中看到回显,但是从不显示警告框,这同样适用于我正在尝试打开的页面。

通过检查我从请求中得到的响应,我注意到它有一些奇怪的东西。这是完整的回复:

BLAM    
<script>alert(1); window.open("http://192.168.1.220/var/www/html/DDT_creation.php");</script>

我知道JS工作正常(在同一文件的其他部分使用它),我不明白为什么代码不会立即执行,而是与响应一起发送。

1 个答案:

答案 0 :(得分:1)

任何AJAX请求的响应始终被视为文本,除非另有说明,在这种情况下,响应将被视为您选择的类型,例如JSON。这意味着响应中的任何JavaScript代码都不会被执行。您需要在页面响应中添加代码才能执行,但同样,通过innerHTML等常规方法将JavaScript代码添加到页面中将无法执行代码。< / p>

相反,您应该将window.open代码放在jQuery AJAX调用中,或者从代码中的任何位置放置您有权访问请求的响应。

像这样...

$.ajax({
    type: 'GET',
    url: 'http://example.com/',

    success: function(response) {
        window.open('http://192.168.1.220/var/www/html/DDT_creation.php');
    }
});