Ajax使用post发送HTML数据但$ _POST为空

时间:2013-06-25 07:49:15

标签: php jquery ajax

我正在尝试通过ajax POST将iframe格式从iframe发送到php,但$_POST始终为null。

的Ajax

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显示发出了请求并且数据已发送但$pdf保持为空,仅显示正常回显。我需要iframe的HTML结构来生成PDF

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

2 个答案:

答案 0 :(得分:2)

您需要研究the lifecycle of a PHP request。当您提交ajax请求时,将调用success回调,其中一个参数包含您期望的输出:

Test<br>=<html data here>

但是,当您重定向到pdf.php时,您实际上是在发送另一个请求。这个其他请求没有post变量,因此$_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请求调用您的success函数,第一个参数是返回值pdf.phpTest<br>=content goes here
  4. 您的javascript会将用户代理重定向到pdf.php
  5. GET请求是pdf.php,没有变量
  6. pdf.php返回(并在您的浏览器中显示)Test<br>=,因为此时$_POST['html']为空
  7. 现在为什么第二次pdf.php没有返回它首先要求的返回值?因为HTTP is a stateless protocol。这意味着对pdf.php的一个请求与另一个请求完全不同。如果不使用GET,POST或SESSION变量(包括cookie),pdf.php的一个请求就不知道对pdf.php的任何其他请求。

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

答案 1 :(得分:1)

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

尝试使用响应:

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

     },