7

ユーザーがプロセスを段階的に完了できるようにする新しい機能をアプリに追加しています。

Step1 ドロップダウン値を選択

次のボタンとステップ 2 を押します (ajax リクエストが部分ビューをロードしてレンダリングし、ツリー ビューをレンダリングします)

次へボタンを押す

ステップ 3 (XMLHttpRequest 経由でファイルをアップロード)

次へボタンを押す

ステップ 4 (部分ビューをレンダリングするために別の ajax 要求が行われます) 何らかの理由で、この要求がコントローラーのアクション メソッドにヒットすることはありません。ステップ2でアクションメソッドに投稿すると、正常に投稿されますが、このステップには別のアクションがあります。

IE 10 開発者ツールで次の警告が表示されます

SEC7127: CORS 要求のリダイレクトがブロックされました。

XMLHttpRequest: ネットワーク エラー 0x800c0014、リダイレクトの問題が発生しました。SCRIPT7002: XMLHttpRequest: ネットワーク エラー 0x800c0014、リダイレクトの問題が発生しました。

上記のエラーは、このステップの前の XMLhhtprequest に関連しているようです。XMLhttprequest を NULL に設定しようとしたか、成功イベントで破棄しようとしました。ステップ 4 では理解できませんが、ステップ 2 のアクションには投稿できますが、別のアクションには投稿できませんか?

ステップ 3

  function handleFiles() {

        var formdata = new FormData(); //FormData object
        var xhr = new XMLHttpRequest();
        xhr.open('POST', fileUploadURL);
        xhr.setRequestHeader('Content-type', 'multipart/form-data');

        //Appending file information in Http headers
        xhr.setRequestHeader('X-File-Name', document.getElementById('myFile').files[0].name);
        xhr.setRequestHeader('X-File-Type', document.getElementById('myFile').files[0].type);
        xhr.setRequestHeader('X-File-Size', document.getElementById('myFile').files[0].size);

        //Sending file in XMLHttpRequest
        xhr.send(document.getElementById('myFile').files[0]);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                $("input[id=filestoredname]").val(xhr.responseText);
                alert("file saved..");

            }
        }
                return false;
    }

var instrumentSelectionUrl = '@Url.Action("Step2", "ErrorCode")';//step2
var finalTreeViewUrl = '@Url.Action("renderFinalTree", "ErrorCode")';//step3
var fileUploadURL = '@Url.Action("UploadFiles", "ErrorCode")';//step3


$(function () {
    $('form').stepy({
        backLabel: '<<',
        nextLabel: '>>',
        finishButton: false,
        next: function (index) {
            alert(index);
            var v = $("#InsIdLst").chosen().val();
            if (v == null && index == 2) {
                alert("Please select an Instrument");
                return false;
            }
            if (v != null && index == 2) {
                var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay');
                $.ajax({
                    type: 'POST',
                    url: instrumentSelectionUrl,
                    cache: false,
                    datatype: "html",
                    data: $("form").serialize(),
                    success: function (result) {
                        $("#errorCodes").html(result);
                        overlay.remove();
                    }
                });
            }
            if (index == 4) {
                alert("try..");
                $.ajax({
                    type: 'POST',
                    url: finalTreeViewUrl,
                    cache: false,
                    datatype: "html",
                    data: $("form").serialize(),
                    success: function (result) {
                        $("#errorCodesSave").html(result);
                    }
                });
            }

        }
    });
});
4

1 に答える 1

3

したがって、ステップ4で使用する場合

$("#errorCodesSave").load(finalTreeViewUrl, { fileName: $("#filestoredname").val(), $("#InsIdLst").chosen().val();: 1 }); 

$Ajax の代わりに、目的のコントローラー アクションに投稿します。これは私にとっては十分に機能します。

于 2015-08-28T01:10:06.817 に答える