jQuery ajaxForm никогда не добивается успеха при загрузке файлов на jQuery1.5 - PullRequest
0 голосов
/ 18 апреля 2011

Я использую плагин формы jquery для загрузки файла и получения HTML (или текста, или чего-либо еще) в обратном вызове.

Это работало нормально до 1,5, но как только я преобразовал в 1,5,обратный вызов никогда не происходит ТОЛЬКО ЕСЛИ файл был выбран в форме.Если это не так, происходит обратный вызов, и мой код срабатывает правильно.Это очень странно и очень специфично, потому что этого никогда не случалось с 1.4, и я серьезно консольно регистрировал и отлаживал каждую строку кода.

Вот пример кода JS:

var options= {
        dataType:'html',beforeSubmit:function() {
            $(field).val(filePath);
            loaderdisplay("show");
            $("#reuploadDocumentDialogForm").hide();
        },
        url:actionurl, // the url containing the below function
        type:"POST",
        success:function(responseText, statusText)
        {
                    // If $_FILES was empty, the last IF fires. If not, NOTHING happens.
            console.log(responseText);
            console.log(statusText);
            if (responseText=='success-1')
            {
                loaderdisplay("hide");
                reportStatus(1, "Successfully reuploaded file.");
                $("#reuploadDocumentDialogForm").css("display","inline");
                $("#reuploadDocumentDialog").dialog('close');
            }
            else if (responseText=='success-0')
            {
                loaderdisplay("hide");
                reportStatus(0, "There was an error.File was not uploaded.");
                $("#reuploadDocumentDialogForm").css("display","inline");
            }
            else if (responseText=='error uploading file')
            {
                loaderdisplay("hide");
                reportStatus(0, "File was not uploaded.Try to make the file size smaller.");
                $("#reuploadDocumentDialogForm").show();
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
                        // THIS NEVER EVER HAPPENS regardless of what I do
                        alert(textStatus+" - There was an error submitting the form: "+errorThrown);
        }

    };
    $('#reuploadDocumentDialogForm').ajaxForm(options);

А здесьпример фрагмента кода PHP:

public function reuploaddocumentAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
        if (!empty($_FILES))
        {
            $tempFile = $_FILES['reuploadDocumentDialogFormFile']['tmp_name'];

            $targetFile = $this->_getParam("reuploadDocumentDialogFormTargetFile");
            $result = move_uploaded_file($tempFile,$targetFile);
            die('success-'.$result);
        }
        else
        {
            die('error uploading file');
        }
    }

Я попытался вернуть die (json_encode (array ("success" => $ result)));также (и изменил dataType в параметрах формы на JSON, и я попытался изменить dataType на текст и оставить штамп в виде строки. Ничего не работает - я просто не могу ввести обратный вызов успеха, если я на jQuery1.5И файл был выбран. Он входит в него просто замечательно, если файл не был выбран.

Также стоит отметить: файл загружен нормально! Я просто никогда не ввожу обратный вызов! Любые идеи? Спасибо

1 Ответ

0 голосов
/ 19 апреля 2011

Ну, нашел виновника.Кажется, файл jquery.form.js, размещенный на их домашней странице, является устаревшей версией.Исправление этой проблемы было сделано в последней сборке (2.6.9), которую я нашел на их github.После того, как я переключил jquery на 1.5 и jquery на 2.6.9, все заработало как раньше.

...