PHP / jQuery Ajax / Sessions仅在Chrome for Android上出现奇怪的行为

时间:2016-03-28 19:35:59

标签: php jquery html ajax html5

在我工作的空闲时间项目中,我一直在努力解决几个奇怪的问题。这是我的第一个"大" PHP / JS项目,说实话,我第一次使用ajax,所以我可能只是遗漏了一些东西。

无论如何,这是怎么回事。我使用PHP和jQuery技术编写了一个非常简单的发票系统,使用mPDF库从HTML / CSS生成PDF文件。我主要在模板中使用Session变量,该变量被发送到mPDF以生成PDF发票。

问题我在Chrome for Android上遇到过问题,在OnePlus One上测试了最新版本。会话变量未显示在PDF本身中。我认为它完全随机地工作了一两次。我的Android设备和谷歌浏览器的朋友也证实了同样的问题。

test.php的

<?php
session_start();
error_reporting(E_ALL);

if (!isset($_SESSION['GLO_IS_LOGGED_IN'])) {
    header("Location: index.php");
    exit;
}

include('libs/mPDF/mpdf.php');

ob_start();
include('protected/templates/template.php');
$data = ob_get_clean();

$mpdf = new mPDF();
$mpdf->WriteHTML($data);
$mpdf->Output('protected/invoices/Faktura ' . date('j-m-Y-H-i-s') . '.pdf');
$mpdf->Output('Faktura ' . date('j-m-Y-H-i-s') . '.pdf', 'D');

unset($_SESSION['VAR_DESCRIPTION_ARRAY']);
unset($_SESSION['VAR_AMOUNT_ARRAY']);
unset($_SESSION['VAR_PRICE_ARRAY']);
unset($_SESSION['VAR_TO_ADDRESS']);
unset($_SESSION['VAR_INVOICE_NUMBER']);

以下是您在 invoice-script.js 中可能已注意到的 generateInvoice.php 文件:

<?php
session_start();
error_reporting(E_ALL);

if (!isset($_SESSION['GLO_IS_LOGGED_IN'])) {
    header("Location: index.php");
    exit;
}

if (!empty($_POST['invoice-number'])) {
    $_SESSION['VAR_INVOICE_NUMBER'] = trim($_POST['invoice-number']);
} else {
    echo('Please add invoice number');
    exit;
}

if (!empty($_POST['to-address'])) {
    $_SESSION['VAR_TO_ADDRESS'] = ($_POST['to-address']);
} else {
    echo('Internal Error');
    exit;
}

$_SESSION['VAR_DESCRIPTION_ARRAY'] = $_POST['invoice-description'];
$_SESSION['VAR_AMOUNT_ARRAY'] = $_POST['invoice-amount'];
$_SESSION['VAR_PRICE_ARRAY'] = $_POST['invoice-price'];

我不想让这篇文章发布得很长,所以我不会在这里发布任何代码片段。相信我,我已经尽我所能去了解自己发生了什么事情,感觉非常糟糕,我无法弄明白自己,我需要向别人寻求帮助。无论如何感谢任何反馈和帮助。干杯!

2 个答案:

答案 0 :(得分:1)

'invoice-form'不包含任何字段 - 输入标记应位于表单

答案 1 :(得分:0)

好的人,我想我找到了解决方法。

test.php 中注释掉所有未设置的方法,解决了Chrome for Android问题。

我不明白为什么会发生这种情况。为什么在生成发票之前未设置会话变量?他们不应该,对吧?或者我真的错过了什么?我知道我不应该在我自己的答案中要求澄清,但我认为在这一点上我真的需要。

欢呼并感谢IanMcL解决我的边缘问题!