2011-03-23 66 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

相關問題