Мне нужно быстрое объяснение того, как загрузить файл стиля 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);
Попробуй это