Обратный вызов IFrame, ответ сервера не отображается на клиенте - PullRequest
1 голос
/ 11 ноября 2009

спасибо за клик.

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

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

У меня есть фрейм на моей странице:

 <iframe id="target_frame" src="" style="border:0px; width:0px; height:0px"></iframe>

Тег формы указывает на это:

<form enctype="multipart/form-data" id="fileUploadForm" name="fileUploadForm" action="picupload.aspx" method="post" target="target_frame">

И кнопка отправки запускает загрузку файла через iframe:

<input id="submit" type="submit" value="upload" />

В файле picupload.aspx.cs у меня есть метод, который возвращает динамические данные. Затем я отправляю его клиенту:

message = data;
Response.Write(String.Format("<script language='javascript' type='text/javascript'>window.parent.handleResponse('{0}');</script>", message));

На клиенте у меня есть обработчик ответа:

 function handleResponse(msg) {
        document.getElementById('statusDiv').innerHTML = msg;
  }

Мое намерение состоит в том, чтобы увидеть изменение значения сообщения для каждого загруженного файла, но я никогда не вижу, чтобы что-то появлялось в statusDiv, не говоря уже о динамически меняющихся сообщениях.

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 23 мая 2012

Мне не удалось найти способ обнаружить ответ сервера iframe, но, похоже, цель вашего iframe - просто показать результаты запроса на отправку формы без обновления страницы. Если это так, то, возможно, вы можете заменить iframe на XHR вызов.

Я бы порекомендовал использовать некоторые разновидности библиотеки Ajax для простоты, но у меня было несколько сценариев, где это не было вариантом по той или иной причине. Вот забавный пример того, как сделать запрос отправки формы XHR, используя Javascript без AJAX.

ПРИМЕЧАНИЕ: В этом примере предполагается, что form не отправляет данные файла (это совсем другой чайник рыбы, и намного лучше обрабатывается с помощью AJAX). Он также не будет отправлять значения тегов <select> или <textarea>, но вы, безусловно, могли бы расширить JavaScript для их обработки.

/* HTML */
<form action="script.php" method="post"   // these are up to you
    onsubmit="sendFormRequest(this); return false;">

/* Javascript */
function sendFormRequest(form){
    var fields = form.getElementsByTagName('input');
    var data = [];
    for(var i=0; i<fields.length; ++i){
        if(fields[i].getAttribute('type') != 'submit')
            data[i] = escape(fields[i].name) + '=' + escape(fields[i].value);
    }
    var req = new XMLHttpRequest();
    req.open(form.getAttribute('method'), form.getAttribute('action'), false);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(data.join('&'));
    return {'status':req.status, 'responseBody':req.responseText};
}

/* Returns */
Object { status=200, responseBody="<!DOCTYPE html PUB ... \n</body>\n</html>\n" }

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

0 голосов
/ 29 мая 2010

Надеюсь, это поможет:

http://www.nbsp.es/2007/11/23/up-libreria-para-subir-archivos-de-forma-oculta/

Справка на испанском языке, но код есть.

0 голосов
/ 11 ноября 2009

Пока вы не предоставите больше кода, я могу только догадываться о проблеме. Сначала я должен убедиться, что страница iframe (picupload.aspx.cs) размещена в том же домене, что и страница, содержащая iframe.

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