Проблема с загрузкой динамических файлов с помощью PHP / AJAX - PullRequest
0 голосов
/ 23 марта 2011

Я создал довольно безопасную целевую страницу для наших клиентов, чтобы загружать копии их контрактов.

Вы нажимаете на retrieve.php, появляется лицензионное соглашение (JQuery Dialog).После того, как вы подпишете и примете, диалоговое окно jQuery исчезнет.

На сервер отправляется вызов AJAX, чтобы получить хешированное имя файла, и создается ссылка для безопасного просмотра PDF в вашем браузере.

Проблема в том, что теперь компания хочет, чтобы я добавил JPG-версию контракта.Контракт состоит из 2 или 3 страниц, в зависимости от того, какой сервис они хотят использовать у нас.

Проблема, с которой я сталкиваюсь, заключается в том, как сгенерировать правильное количество ссылок для версий jpg?Все сделано в AJAX, и я бы предпочел не возвращать количество изображений из AJAX.

Имена изображений (такой же хэш, как в pdf) -. Jpg

Есть ли у кого-нибудь динамическийспособ сделать это?

Я написал функцию, которая делает это в PHP, но, поскольку я запускаю генерацию ссылок на стороне клиента, она не будет работать.

Мой вопрос: явы были мной, вы бы вернули все 3 или 4 ссылки (pdf + сколько бы ни было jpgs) обратно через JSON?
Не могли бы вы передать количество страниц обратно в json и создать ссылки динамически?Есть ли у вас лучшие решения?

Какой-то код: Вот AJAX Call, который получает, отправляет информацию на сервер, затем создает ссылки:

$.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);

1 Ответ

0 голосов
/ 23 марта 2011

Почему бы не вернуть один сжатый файл (tar, zip и т. Д.) Из всех изображений? Это даст вам одну загрузку и сделает загрузку быстрее / меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...