0

我试图在我的控制器中调用两种方法。一个启动转换,另一个将转换百分比返回到视图以更新进度条。在调用 getPercentage 函数之前,通过单击“startConversion”按钮来启动转换。但是,只有转换开始,而百分比函数不会。我已经尝试先启动百分比函数并且它可以工作,但是在我按下转换按钮后 setTimeout 停止并且它不会再更新了。

有没有人有什么可能是错误的建议以及任何解决方法?

//View
<script type="text/javascript" >
    $(window).load(function () {
        startConvert();
    });

    function startConvert() {
        document.getElementById("startConversion").click()
        getPercentage();
    }

    function getPercentage() {
            $.ajax(
            {
                type: "POST",
                url: "@Url.Action("GetPercentage","File")",
                success: function (result) {
                    $('#div').html(result);
                    var r = result;
                    progressBarSim(r);
                },
                error: function (req, status, error) {
                    alert("Fail");
                }
            });
        setTimeout(getPercentage, 500);
    }

</script>

<form action="" method="post" enctype="multipart/form-data">         
    <input id="startConversion" type="Submit"  name="Convert" />
</form>

//FileController
[HttpPost]
public double GetPercentage() {
    return enc.Percent;
}

[HttpPost]
public ActionResult Convert()
{
... //Removed
}
4

2 回答 2

0

您正在提交表单,这基本上会导致浏览器加载新页面(无论表单操作的结果是什么),这就是似乎从未调用 getPercentage() 方法的原因。

最简单的方法是使用 ajax 提交表单,但是您似乎希望用户上传文件,而这些文件不能通过 ajax 提交。

因此,我建议将表单上的目标设置为页面上不可见的 iframe。这将使表单提交到该 iframe(因此结果将加载到 iframe 中,并且不会导致在主窗口中加载新页面)。

即,类似:

  <iframe name="uploadTarget" src="" style="position:absolute;left:-9999px"></iframe>
  <form action="" method="post" enctype="multipart/form-data" target="uploadTarget">
  ... etc ...

如果要跟踪实际上传的进度,则需要查看其他选项,例如使用http://blueimp.github.io/jQuery-File-Upload/

编辑:使用 ajax 提交表单:

function startConvert() {
    var form = $("#startConversion").closest("form");
    $.post(form.attr('action'), form.serializeArray());
    getPercentage();
}
于 2013-04-19T08:35:39.247 回答
0

为什么不尝试在方法本身setInterval(getPercentage, 500);内部调用,而不是一次又一次地调用。startConvertsetTimeout

于 2013-04-19T08:35:52.843 回答