JQuery fileupload не работает в IE 8 и 9 - программирование
Подтвердить что ты не робот

JQuery fileupload не работает в IE 8 и 9

enter image description here

Этот код работает в FF и chrome. В IE 8 или 9 я получаю ошибку 500, говоря, что свойство null не равно null.

Вот html

<div id="upload_button_div_general" class="fileupload-buttonbar" data-url="/Upload/SomeMethod">
    <label class="fileinput-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icon-primary" role="button"> 
        <span class="ui-button-text">
            <span>Add Documents...</span> 
        </span>
        <input id="upload_button" type="file" name="postedFiles" multiple="" />
    </label>
</div>
<div id="UploadMessage" data-bind="visible: showMessage"> 
    <span>Documents</span>

    <ul data-bind="foreach: upload()">
        <li> 
            <a href="#" data-bind="click: $parent.openFile">
                <span data-bind="text: $data.fileName">  </span>
            </a>
        </li>
    </ul>
</div>

Вот javascript

function Upload(div, additionalParams, successFunc, failureFunc) {
    $('#' + div).fileupload({
        dataType: 'json',
        url: rootPath + 'Upload/SomeMethod',
        formData: additionalParams,
        start: function (e, data) {
            showLoading();
        },
        stop: function (e, data) {
            hideLoading();
        },
        add: function (e, data) {
            data.submit();
        },
        always: function (e, data) {
            var result = data.result;
            if (result.HasError) {
                failureFunc(result.Error);
            } else {
                successFunc(result);
            }
        }
    });
};

Метод контроллера

public virtual JsonResult SomeMethod(IEnumerable<HttpPostedFileBase> postedFiles, int id)
4b9b3361

Ответ 1

Мне удалось заставить его работать, включив jquery.iframe-transport.js, а затем мне пришлось удалить мой нокаут "с" привязкой данных из div, чтобы заставить его работать в IE8, потому что он работал в IE9. (У меня была привязка выше моего опубликованного кода) Спасибо за все предложения.

Ответ 2

Поскольку эта функция работает нормально в FF, есть только одна возможность того, что переменные, которые вы здесь передаете, являются undefined только для IE.

Проверьте значения переменных в консоли IE.

Подсказка: IE строит о типах и обо всем.

Например:

parseInt(Number);  

FF и Chrome принимает его как десятичное значение, тогда как IE принимает его как восьмеричное число. Поэтому рекомендуется использовать parseInt(Number,10).

И даже в отношении дат, если вы предоставляете

var currentDate = new Date("March 18, 2013 11:13:00")

Хорошо работает в Chrome и FF, но показывает IE undefined или invalid Date.

Вы можете найти больше о рекомендуемой нотации даты здесь

Итак, в приведенных выше примерах я просто пытаюсь сказать вам, что вы, возможно, забыли объявить тип или правильную нотацию.

Хотя, это не тот ответ, который вы искали, я надеюсь, что эта информация поможет вам.

Обновление. Поскольку ошибка 500 error, проблема может быть более вероятной в значении переменной rootPath.

Ответ 3

Просто установите тип содержимого в text/html и отправьте его как JSON.

Это должно работать для всех браузеров.

Ответ 4

            $("#txt1").fileupload({
            replaceFileInput: false,
            dataType: "json",        
            datatype:"json",
            url: "<%=Page.ResolveUrl("~/WebService/AddAttachment.ashx")%>",
            done: function (e, data) {
                $.each(data.result, function (index, value) {
             //You get the response data in here from your web service
                })
                $("#txt1").val("");
            }`enter code here`
        }); 

Это проверено и работает нормально как в IE8, так и в IE9 + выше. Обязательно используйте правильный тип данных: "json" (или тип данных: "json" ), а также убедитесь, что ваш ответ метода веб-службы верен. Благодаря

Ответ 5

В IE, если вы возвращаете данные типа json при загрузке файла, вы можете получить эти данные (json) следующим образом:

done: function (e, datos)
{
try
{
   //This in FF, Chrome, Safari
   data=eval(JSON.parse(datos.result));
}catch (er)
{
    //This in IE
    data=eval(JSON.parse(datos.result[0].documentElement.innerText));
}

Ответ 6

Если по jQuery fileupload вы имеете в виду использование http://blueimp.github.com/jQuery-File-Upload/, то в разделе поддержки браузера четко сказано, что для каждой функции требуется IE 10+ они реализованы.

https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support

Если вы имели в виду другой плагин, просто игнорируйте мой комментарий.