2013-08-02 3 views
0

У меня есть вопрос, связанный с загрузкой файла с помощью POST.Запрос POST вызывает вызов GET, который не отвечает

У меня есть следующий JavaScript, который отправляет запрос POST на стороне сервера для загрузки файла:

function postCall(url, params) { 
    function doPostCall() { 
    var newForm = jQuery('<form>', { 
     'method':'POST', 
     'action': url 
    }); 

    for(key in params) { 
     if (params.hasOwnProperty(key)) { 
      newForm.append(jQuery('<input>', { 
       'name': key, 
       'value': params[key], 
       'type': 'hidden' 
      })); 
     } 
    } 
    newForm.appendTo("body").submit(); 
} 

Этот метод вызывается из невидимого фрейма со страницы HTML. На этой странице также есть еще один нормальный запрос GET для получения статического HTML. Тем не менее, каждый раз, когда вызывается вышеупомянутый метод, вызов для получения статической страницы никогда не возвращается со стороны сервера.

Я знаю, что это немного сложно понять с такой небольшой информацией, но этот код огромен и трудно здесь. Мой вопрос в том, что:

  1. Есть ли очевидная проблема с вышеуказанным кодом, который использует невидимую форму для отправки запроса POST для получения файла?
  2. Есть ли другой лучший способ отправить запрос POST на сервер для загрузки файла. (Люди сказали, что Ajax-вызовы не могут использоваться для загрузки файла)?
  3. Если этот код в порядке и нет другого способа. Есть ли способ заставить этот метод запускаться последним после загрузки всей страницы и завершения всех остальных запросов?
+0

ли запрос получить получить прерванную из-за перезагрузки страницы, инициированной формы пост? обычно такая запись формы имеет атрибут назначения, указывающий на конкретный iframe, в результате чего выполняется перезагрузка iframe, но не вся страница, что позволит получить запрос на получение. –

+0

Я не понимаю, почему вы не могли использовать AJAX для загрузки. И зачем использовать POST, когда вы что-то получаете? – putvande

+0

@putvande, поскольку с помощью ajax вы не можете отправлять контент в виде файла на компьютер пользователя. –

ответ

0
  1. Это не очень понятно из описания в запросе GET отправляется из того же фрейма или нет. Это да, то после отправки формы содержимое содержимого iframe перезагружается - потому что это не запрос AJAX - остановка всего остального кода javascript, который выполняется в iframe.

  2. Ну, вы можете добавить атрибут 'target = "_ blank" в форму - в этом случае содержимое iframe не будет перезагружаться при отправке формы.

  3. Да, это вполне возможно. Метод jQuery.ajax возвращает объект «Отложенные». Таким образом, вы можете хранить эти отложенные объекты в переменной массива и ждать, пока все отложенные не будут решены. И запустить POST submit только тогда. jquery.whenAll плагин может упростить эту задачу:

    jQuery.whenAll(
        $.get(URL1), 
        $.get(URL2) 
    ) 
    .always(function(results) { postCall(url, params) }); 
    
Смежные вопросы