2

非表示の iframe を使用して AJAX スタイルのファイルをアップロードする方法について簡単に説明する必要がありました。フォームに関連する 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とその後のすべてのブラウザで動作できるようにしたいので、このようにしています。

助けていただければ幸いです。時間をありがとう!

4

2 に答える 2

1

私はこのコードを使用し、私のために働きます:

$(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);

これを試して

于 2012-07-06T21:43:51.583 に答える
1

さて、私はそのようなものを使用しました:

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

... 代わりは。しかし、一般的なアプローチは似ています。この文字列をチェックし、空の場合は何もしません (つまり、すぐに戻ります)。それ以外の場合は、この json の分析に進みます。

于 2012-07-06T21:18:50.787 に答える