1

我正在尝试通过 ajax 将 HTML 结构从 iframe 发送POST到 php,但$_POST始终为空。

阿贾克斯

function makePDF(){
     var f = $('#iframe1');
     var data = f.contents().find('body').html();
     var html = escape(data);
     alert(html);
     
     
     
     $.ajax({
         type: "POST",
         url: "pdf.php",
         data: {'html': html},
         cache: false,
         success:function(){
                             alert('done');
             document.location.href='pdf.php';
            
         },
         error: function(){
             alert('error');
             }
     });
 }

这个函数是通过 onClick 调用的。

HTML

<input id="btnpdf" class="btn btn-primary btnpdfh" type="button" value="Generate Preview as PDF" name="PDF" onClick="makePDF()">

pdf.php

<?php 
   echo 'Test<br>=';
   $pdf = $_POST['html'];
   echo $pdf;
?>

Firebug 显示发出了 post 请求并且数据已发送但$pdf保持为空,仅显示正常的回显。我需要 iframe 的 HTML 结构来生成PDF.

任何帮助表示赞赏,谢谢。

4

2 回答 2

2

您需要研究PHP 请求的生命周期。当您提交您的 ajax 请求时,将success使用一个包含您期望的输出的参数调用回调:

Test<br>=<html data here>

但是,当您重定向到 时pdf.php,您实际上是在发送另一个请求。这个另一个请求没有发布变量,所以$_POST['html']是一个空字符串。

尝试将成功函数更改为:

succes: function(data) {
    console.log(data);
    alert('Done!');
}

然后,打开页面。看到“完成!”后,检查 firebug 中的 javascript 控制台。您应该会看到预期的结果。

这是您的页面所做的时间表:

  1. makePDF()被称为 POST 请求被发送到带有 POST 变量的 pdf.php:{html: 'content goes here'}
  2. pdf.php返回Test<br>=content goes here
  3. AJAX 请求调用您的成功函数,第一个参数是pdf.php( Test<br>=content goes here)的返回值
  4. 您的 javascript 将用户代理重定向到pdf.php
  5. GET 请求是在pdf.php没有变量的情况下发出的
  6. pdf.php返回(并显示在您的浏览器中)Test<br>=,因为$_POST['html']此时为空

现在为什么第二次不pdf.php返回它第一次返回的值?因为HTTP 是无状态协议。这意味着一个请求与pdf.php另一个请求完全不同。如果不使用 GET、POST 或 SESSION 变量(包括 cookie),一个pdf.phppdf.php.

另外,我相信您在这种情况下滥用了 AJAX。AJAX 的目的是在不必导航到新页面的情况下向服务器执行请求。您应该执行 ajax 请求,然后获取返回的数据并将其注入当前页面(您可以使用传递给success函数的第一个参数)或完全放弃 AJAX 并重定向到pdf.php.

于 2013-06-25T07:57:18.373 回答
1

您的 ajax 正在工作,但您没有对响应做任何事情。相反,您重定向到pdf.php. 当您在success处理程序中重定向时,您正在执行一个完全独立的 HTTP 请求,POST 数据现在已从先前的请求中消失,这就是重定向后$_POST['html']为空的原因。

尝试对响应做一些事情:

     success:function(response){ // <-- capture response
         alert('done' + response);
         document.location.href='pdf.php';

     },
于 2013-06-25T07:55:43.327 回答