2009-11-10 2 views
1

спасибо, что выкрой.Обратный вызов IFrame, ответ сервера не появляется на клиенте

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

ПРОБЛЕМА заключается в том, что я не могу получить ответ сервера , чтобы он появился на клиенте. Я должен следующей конструкции:

У меня есть 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"> 

И кнопки передачи начинает загрузку файла с помощью фрейма :

<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, не говоря уже о динамически изменяющихся сообщениях.

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

+0

Я думаю, что ваш код пропал без вести –

+0

Thanks Justin. Я забыл нажать кнопку «Код». Теперь вы сможете увидеть все :) –

+0

Можете ли вы получить какой-либо javascript для выполнения в кадре после завершения загрузки? Что-то простое, как 'alert (1);'? –

ответ

0

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

+0

Спасибо, Джастин. Да, тот же домен. Я просто понял, что мне нужно добавить оболочку «code», чтобы люди могли просматривать мой код. Дайте мне знать, если вы хотите увидеть что-то еще ... –

1

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

Я бы рекомендовал использовать какой-то вкус Ajax library для простоты, но у меня было несколько сценариев, где это не было вариантом по той или иной причине. Вот пример игрушки, как сделать запрос на отправку формы 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" } 

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