запретить автоматическую повторную отправку формы при загрузке страницы - PullRequest
0 голосов
/ 28 апреля 2010

Я использую jQuery для указания цели формы на iframe в .submit (). Это для загрузки файла. Он работает нормально, но когда страница перезагружается и iframe добавляется в DOM, iframe автоматически повторно отправляет форму, вызывая отправку одного и того же файла на сервер при каждой загрузке страницы.

Если я не включу iframe в разметку HTML или не добавлю его в DOM, этого не произойдет, но, конечно, мне нужен iFrame.

Итак, мой вопрос, как я могу предотвратить это?

:)

Andrew

Ответы [ 2 ]

0 голосов
/ 30 апреля 2010

Итак, оказалось, что если iframe существует в DOM, когда пользователь перезагружает страницу, он снова запустит форму, поэтому я просто не добавил iframe, пока пользователь не щелкнет, чтобы отправить файл.

Полный код (некоторые относятся только к моему проекту, но идея есть:

function uploadHandler()
{
    if ($.browser.safari || $.browser.opera || $.browser.msie)
    {
        setTimeout(uploadComplete, 5);
    }
    else
    {
        uploadComplete(this);
    }
}


function uploadFile(e)
{

    if($('.uploadFrame').length > 0)
    {
        uploadiFrameNode.remove();
    }
    n = 'f' + Math.floor(Math.random() * 99999);
    uploadiFrameNode = $('<iframe class="uploadFrame invfr" src="about:blank" id="'+n+'" name="'+n+'"></iframe>');
    uploadiFrameNode.load(uploadHandler);
    $('body').append(uploadiFrameNode);
    formNode.attr('action', _ajaxPath  + "?drive=" + drive);
    formNode.attr('target', n);
    formNode.attr('method', 'POST');
    formNode.attr('enctype', 'multipart/form-data');
    formPathNode.val(tree[tree.length - 1].path);
}
function uploadComplete()
{
    refresh(tree[tree.length - 1].path);
    backToMenu();
    fileReset();
}
0 голосов
/ 28 апреля 2010

добавить iframe к телу документа на документе готов.

$(function(){
    $("body").append("<iframe id='whatever' src='javascript:void(0)' />");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...