Загрузка файла Jquery с скрытым IFrame

Мне нужно быстрое объяснение того, как загрузить файл стиля AJAX, используя скрытый iframe. Вот часть HTML-кода, относящегося к форме:

<div id = "file" class = "info"> <form id="file_upload_form" method="post" enctype="multipart/form-data" action='script/uploadScript'> <input name="file" id="file" size="27" type="file" /><br /> <input id = "uploadSubmit" type="submit" name="action" value="Upload" /> <iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe> </form> </div> 

Вот соответствующий PHP:

 public function uploadScript(){ $returnVals = array(); if ($_FILES["file"]["error"] > 0){ $returnVals['error'] = "Error: " . $_FILES["file"]["error"] . "<br />"; }else{ if ($_FILES["file"]["type"] != "text/plain"){ $returnVals['error'] = "Badtype"; }else{ $returnVals['text'] = file_get_contents($_FILES["file"]["tmp_name"]); } } echo json_encode($returnVals); } 

Итак, по сути, PHP получает файл и проверяет, является ли он текстовым файлом. Затем я хочу получить доступ к возвращенному json в javascript. Вот где я запутался …

 $("#file_upload_form").submit(function() { $("#file_upload_form").target = "upload_target"; $("#upload_target").onload = uploadDone(); }); 

В идеале, когда загрузка завершена и загружается iframe, это должно вызывать

 function uploadDone() { alert($("#upload_target").contents().find("body").text()); } 

Но это всегда пусто. По существу, returnVals помещаются в тело iframe, но после предупреждения, поэтому в нем ничего нет. Итак, есть ли способ исправить этот небольшой недостаток?

Есть ли лучшее объяснение того, как это сделать? Я ударился головой об этом с разными примерами кодов и т. Д. Весь день без везения: /

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

Я был бы признателен за помощь. Спасибо за это время!

Ну, я использовал что-то вроде этого:

 $("#upload_target")[0].contentWindow.document.body.innerHTML 

… вместо этого. Но общий подход аналогичен: проверьте эту строку, и если она пуста, просто ничего не делайте (т.е. немедленно возвращайтесь). В противном случае приступайте к анализу этого json.

я использую этот код и работаю для меня:

 $(document).ready(function(){ $('form#myform').submit(function(){ $("#hiddenIframe").remove(); $('<iframe name="hiddenIframe" />').appendTo('body').attr({'id': 'hiddenIframe'}); var Frame = $('#hiddenIframe'); var newSrc = 'about:blank?nocache=' + Math.random(); //force new URL Frame.attr('src', newSrc); var iframe = $('#hiddenIframe').load(function(){ var response = iframe.contents().find('body').html(); var txt = $.parseJSON(response); $('#message').append(txt.message); if(txt.error == false){ $.ajax({ type: 'POST', url: '?myurl', dataType: 'json', data: { //some data }, success: function(data){ //some action } }); } }); }); }); 

Это генерирует новый iframe для каждой отправки, моя часть PHP

 $this->message['error'] = true; $this->message['message'] = "Problem!"; echo/print json_encode($this->message); 

Попробуй это