2015-09-08 3 views
0

Я хочу загрузить файл с помощью ajax. Итак, у меня есть небольшой плагин jquery, который добавляет кнопку на страницу. После нажатия кнопки открывается диалоговое окно начальной загрузки с вводом формы и файла. Форма передается в ASP MVC-метод, который сохраняет файл и возвращает json, который отображается в сообщении.Загрузка файла iframe doesent на IE

Он отлично работает в хроме, но в IE функция onload iframe не вызывается, и браузер дает мне json для загрузки. enter image description here

стороне сервера:

public ActionResult Upload(IEnumerable<HttpPostedFileBase> file) 
{ 
    return Json(new { FileName = file.First().FileName }); 
} 

стороне клиента:

$.fn.fileUpload = function (options) { 
    //options 
    var settings = $.extend({ 
     inputName: 'file' 
    }, options); 

    //variables 
    var that = this; 
    var index = 0; 
    var addFileBtn = $("<button>+</button>"); 

    var modal = $('<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">'+ 
         '<div class="modal-dialog" role="document">'+ 
         '<div class="modal-content">'+ 
          '<div class="modal-header">'+ 
          '<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+ 
          '<h4 class="modal-title" id="myModalLabel">Modal title</h4>'+ 
          '</div>'+ 
          '<div class="modal-body">' + 
          '<iframe name="postiframe" id="postiframe" style="width:0;height:0;border:0px solid #fff"></iframe>' + 
          '<form id="my_form" name="my_form" action="/Home/Upload" method="POST" enctype="multipart/form-data" target="postiframe">' + 
           '<input name="complaintId" value="123" type="hidden" />'+ 
           '<input name="file" id="file" type="file"/>'+ 
           '<input type="submit" value="Submit" id="submitBtn"/>'+ 
          '</form>'+ 
          '</div>'+ 
          '<div class="modal-footer">'+ 
          '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>'+ 
          '<button type="button" class="btn btn-primary">Save changes</button>'+ 
          '</div>'+ 
         '</div>'+ 
         '</div>' + 
        '</div>'); 

    //init 
    addFileBtn.click(function() { 
     modal.modal(); 
     modal.find("#submitBtn").click(function (ev) { 
      var form = modal.find('#my_form'); 

      form.attr("encoding", "multipart/form-data"); 
      form.attr("enctype", "multipart/form-data"); 

      modal.find("#postiframe").load(function() { 
       var iframeContents = $(this).contents().find("pre").html() 
       alert(iframeContents); 
      }); 

      form.submit(); 
      return false; 

     }); 
    }); 
    that.append(addFileBtn); 
} 
+1

Ну, вы отправляете форму и возвращаете JSON. Некоторые браузеры будут отображать JSON как обычный текст, другие просят загрузить его. Похоже, вы не хотите возвращать JSON. – epascarello

+0

Спасибо. Изменен метод ASP для возврата Content (string content) вместо Json, и он выглядит нормально. Если вы напишете его как ответ, я его приму. –

ответ

0

Как epascarello предложил я изменил метод Asp MVC для возврата содержимого вместо Json

public ActionResult Upload(IEnumerable<HttpPostedFileBase> file) 
{ 
    return Content("some string in json format"); 
} 

Теперь содержимое загружается в iframe вместо загрузки pr OmpT.

Смежные вопросы