为什么我的Ajax没有将信息发送到外部文件?

时间:2014-03-09 02:48:35

标签: javascript php jquery ajax tcpdf

我的想法是通过ajax将数据发送到外部php,其中外部php将使用tcpdf创建pdf,然后将该pdf返回给我。但是有些不对劲。

我看不出错误在哪里。基本上,我试图通过ajax发送两条信息。第一个是完整的html标记字符串,我使用.html()函数分配给它。第二个是测试它是否也会被发送。

JQuery看起来像这样(问题在于PDF按钮):

$(".pdf-report").dialog({
    autoOpen: false,
    modal: true,
    draggable: true,
    resizable: true,
    width: 700,
    height: 650,
    dialogClass: "no-close",
    buttons: {
        "PDF": function(){
            /*
            var send_html = $('#query_result').html();
            $.post('pdfajax.php',
                {
                    qch: 'TESTQCH',
                    code: send_html
                },
                function( data ){
                    $('#report_result').html(data); // assuming there is a div with id result
                }
            );
            */
            var send_html = $('#report_result').html();
            alert(send_html);
            $('#ireport_result').prop('src', 'pdfajax.php?send_html='+send_html);

        },
        "Close": function() {
            $(this).dialog("close");
        }
    }
});

外部文件pdfajax.php如下所示:

    require_once 'core/init.php';
require_once 'tcpdf/tcpdf.php';

$html = input::get('send_html');

//echo 'test ',var_dump($qch),'<br />',var_dump($html);

$method = $_SERVER['REQUEST_METHOD'];
//echo $method;
if(strtolower($method) == 'post'){

$pdf = new TCPDF();
$pdf->AddPage();

$pdf->writeHTML($html, true, false, false, false, 'C');


$pdf->Output('example_001.pdf', 'I');

我知道什么都没发送,因为这是结果(空白的iframe,而不是上面的文字): enter image description here

哦,是的,输入类有get函数,简单地说:

    public static function get($item){
    if(isset($_POST[$item])){
        return $_POST[$item];
    } elseif (isset($_GET[$item])){
        return $_GET[$item];
    }
    return '';
}

编辑:

这是HTML

<div class="pdf-report" title="Report Dialog">
<br />
<div id="report_result"></div>
<iframe src="tcpdf/examples/example_001.php" id="ireport_result"></iframe>
<br />

1 个答案:

答案 0 :(得分:1)

我不认为,你的ajax调用存在问题。您的$.post似乎没问题。但问题可能是因为你成功的回调处理程序。

在ajax请求成功完成后,您将pdfajax.php设置为iframe的源代码,这没有任何意义。因为,这会触发对URL“pdfajax.php”的新 GET 请求,并且根本不会包含任何请求参数。

理想情况下,您的数据对象将包含从“pdfajax.php”收到的响应,您可以使用该响应在div中显示。

function( data ){
    $('#report_result').html(data); // this can be used for html response not for pdf.
}

但是如果您想要iframe中的数据,我认为不需要Ajax。您可以直接为iframe设置src,如下所示。

    $(".pdf-report").dialog({
    autoOpen: false,
    modal: true,
    draggable: true,
    resizable: true,
    width: 700,
    height: 650,
    dialogClass: "no-close",
    buttons: {
        "PDF": function(){
            var send_html = $('#report_result').html();
            $('#ireport_result').prop('src', 'pdfajax.php?code='+send_html);
        },
        "Close": function() {
            $(this).dialog("close");
        }
    }
});

你的php文件几乎没有问题。请求参数为code而不是send_html,您的请求类型为GET而不是POST

require_once 'core/init.php';
require_once 'tcpdf/tcpdf.php';
$html = input::get('code');

$method = $_SERVER['REQUEST_METHOD'];
if(strtolower($method) == 'get'){
    $pdf = new TCPDF();
    $pdf->AddPage();
    $pdf->writeHTML($html, true, false, false, false, 'C');
    $pdf->Output('example_001.pdf', 'I');
}