【问题标题】:Problem loading dynamic files with PHP/AJAX使用 PHP/AJAX 加载动态文件时出现问题
【发布时间】:2011-03-23 20:29:50
【问题描述】:

我为我们的客户创建了一个相当安全的登录页面,以下载他们的合同副本。

您点击retrieve.php,EULA(jQuery 对话框)出现。签署并接受后,jQuery 对话框消失。

一个 AJAX 调用被发送到服务器以获取散列文件名,并生成一个链接以在您的浏览器中安全地查看 PDF。

问题是,现在公司要我添加一份JPG版本的合同。合同为 2 页或 3 页,具体取决于他们希望与我们一起使用的服务。

我遇到的问题是如何为 jpg 版本生成正确数量的链接?一切都在 AJAX 中完成,我不希望从 AJAX 返回图像的数量。

图像名称是(与 pdf 相同的哈希)-.jpg

有没有人有动态的方法来做到这一点?

我在 PHP 中编写了一个函数来执行此操作,但是由于我在客户端运行链接生成,所以它不起作用。

我的问题是: 你是我,你会通过 JSON 返回所有 3 或 4 个链接(pdf + 有多少 jpg)吗?
您会在 json 中传递回页数并动态创建链接吗? 您有更好的解决方案吗?

一些代码: 这是将信息发送到服务器然后创建链接的 AJAX 调用:

$.ajax({  type: 'POST',
url: 'getContractAJAX.php',
   data: { 
      'pin' : pin.val(),
      'name' : signature.val().toUpperCase(),
      'lead' : '<?php echo $_GET['lead']; ?>'
   }, /* end data */
   cache: false,
   success: function(contractId) {
      if (contractId['success'] == true) {
         contractExpireDate = new Date(contractId['contractExpDate']);
         today = new Date();
         // Log the signature.
         $.post('log.php', {
            signature: $("#electronicSignature").val().toUpperCase(),
        pin: $("#eSpin").val(),
            lead: '<?php echo $_GET['lead']; ?>',
            method: 'SIGNATURE'},
            function(log) {
            if(log['success'] == true) {        

            /* DOWNLOAD IMAGES LINKS */
            $("#downloadLinks").prepend("<a href='#' onclick='log(\""+contractId['contract']+"\", \"DOWNLOAD\");'><img src='img/btnDownloadPdf.png' alt='Downdload PDF' /><br />Download Contract in Adobe &copy; PDF</a>");

         } else {
            alert("There was a problem! Please contact customer support.");
            showDisclosure();
         } /* end else */
                                            }); /* end function(log) */
                                            $("#dialog-confirm").dialog("close");

getContractAJAX.php:

if (isset($_POST['pin']) && isset($_POST['name']) && isset($_POST['lead'])){
    $pin = $_POST['pin'];
    $name = trim($_POST['name']);
    $email = $converter->decode($_POST['lead']);



    /*
     * 
     * 
     * PDO
     * 
     * 
     */
    $stmt = $dbh->prepare("SELECT contract, contractExpireDate 
                            FROM users 
                            WHERE   emailAddress=:email AND 
                                    pin=:pin AND 
                                    concat(firstName, ' ', lastName) LIKE :name AND
                                    contractExpireDate > NOW()
                            LIMIT 1");

    if ($stmt->bindParam(':email', $email, PDO::PARAM_STR) &&
        $stmt->bindParam(':pin', $pin, PDO::PARAM_INT) &&
        $stmt->bindParam(':name', $name, PDO::PARAM_STR)) {
        $stmt->execute();

        $found = 0;
        foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $el) {
            $found++;
            $contract = $el['contract'];
            $contractExpDate = $el['contractExpireDate'];
        }
        $stmt = null;
    }               

    if ($found > 0) {
        $success = true;
    } else {
        $success = false;
        $error = "NO MATCHES FOUND >>> $email >>> $pin >>> $name";
    }


}else{
    $success = false;
    $error = "NOT ALL PASSED";
}

header('Content-type: application/json');
$json = array("contract" => $contract,
              "contractExpDate" => $contractExpDate,
              "success" => $success,
              "messege" => $error);
echo json_encode($json);

【问题讨论】:

  • 一些代码好吗?我们不是弄清楚你的代码的天才哈哈
  • 图像名称应该是(与pdf相同的哈希)-(page#).jpg...我把它放在大于号和小于号中并被过滤掉......
  • 当然...这是一个巨大的脚本,所以我会尝试突出显示有问题的部分。

标签: php ajax json pdf


【解决方案1】:

为什么不返回所有图像的单个压缩文件(tar、zip 等)?这将为您提供一次下载,并使下载速度更快/更小。

【讨论】:

  • 它并不完全是用户友好的。老板很明确他想要什么。他想要 PDF 的链接,或者 JPG 版本的 2 或 3 页的链接。
  • @Mark 我看不出它对用户不友好——我会说任何节省点击的事情。但考虑到约束并查看您的代码,我只需在您的 JSON 中添加一个“图像”键或其他内容,并输出链接到其下载的缩略图列表。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2023-03-20
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多