2011-03-23 67 views
0

我已经创建了一个相当安全的登录页面,供我们的客户下载他们的合同副本。使用PHP/AJAX加载动态文件时出现问题

你碰到了retrieve.php,EULA(jQuery对话框)出现了。签名并接受后,jQuery对话框消失。

将AJAX调用发送到服务器以获取哈希文件名,并生成链接以在浏览器中安全地查看PDF。

问题是,现在该公司希望我添加一个JPG版本的合同。合同要么是2页,要么3页,这取决于他们想要使用的服务。

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

图像名称(相同的散列为PDF) - JPG

没有任何人有一个动态的方式做到这一点?

我写了一个函数,在PHP中这样做,但由于我在客户端运行链接生成,它不会工作。

我的问题是: 我你是我,你会通过JSON返回所有3或4个链接(pdf +但是很多jpgs)吗?
你会将页面数回传给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); 
+0

一些代码请吗?我们不是天才,在计算出我们的代码大声笑 – Neal 2011-03-23 20:30:25

+0

图像名称应该是(与pdf相同的哈希) - (page#)。jpg ...我把它放在大于和小于符号的位置,然后过滤.... – Mark 2011-03-23 20:33:01

+0

显示一些代码! – Neal 2011-03-23 20:33:52

回答

0

为什么不返回一个压缩文件(tar,zip等)的所有图像?这会给你一个单一的下载,并使下载更快/更小。

+0

它不完全用户友好。老板对他想要的东西非常具体。他希望链接到PDF,或者链接到JPG版本的2或3页。 – Mark 2011-03-23 20:46:01

+0

@Mark我不明白它是不是用户友好 - 我会说任何节省点击会是。但考虑到约束条件并查看代码,我只需在JSON中添加一个“图像”键或其他内容,并输出链接到其下载的缩略图列表。 – 2011-03-23 23:28:46

相关问题