web-dev-qa-db-ja.com

jQuery fileuploadがIE 8および9で機能しない

enter image description here

このコードはFFとChromeで動作します。 IE 8または9では、nullでないプロパティはnullであるという500エラーが表示されます。

これが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)
14
segFault

Jquery.iframe-transport.jsを含めることで機能するようになり、IE9で機能するようにするには、divから「with」データバインドをノックアウトしてIE8で機能させる必要がありました。 (私の投稿したコードの上にバインディングがありました)すべての提案に感謝します。

6
segFault

この関数はFFで正常に機能しているため、ここで渡す変数がIEだけで未定義になる可能性は1つだけです。

IEコンソールで各変数の値を確認します。

ヒント:IEはタイプとすべてについて厳密です。

例えば:

_parseInt(Number);  
_

FFとChromeは10進数と見なしますが、IEは8進数と見なします。そのため、parseInt(Number,10)を指定することをお勧めします。

そして、日付に関してさえ、あなたが提供するならば

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

ChromeおよびFFで正常に動作しますが、IEでundefinedまたは_invalid Date_を示します。

日付の推奨表記についての詳細 ここ

したがって、上記の例では、type、またはの宣言を忘れた可能性があることをお伝えしようとしています。正しい表記

これはあなたが探していた答えではありませんが、この情報がお役に立てば幸いです。

Update:エラーは_500 error_であるため、rootPath変数の値に問題がある可能性があります。

1
Mr_Green
            $("#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 +の両方でテストされ、正常に動作しています。正しいdataType: "json"(またはdatatype: "json")を使用し、Webサービスメソッドの応答が正しいことを確認してください。ありがとう

0
Bhavin Mistry

IEの場合、ファイルをアップロードするときにjsonのようなデータを返す場合、次のようにこのdata(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));
}
0
user3062464

Content-typeをtext/htmlに設定し、JSONとして送信するだけです。

これはすべてのブラウザで機能するはずです。

0
Cosmin B