Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 返回文件的mvc3 json结果_Jquery_Json_Asp.net Mvc 3 - Fatal编程技术网

Jquery 返回文件的mvc3 json结果

Jquery 返回文件的mvc3 json结果,jquery,json,asp.net-mvc-3,Jquery,Json,Asp.net Mvc 3,我的情况是:我有一个对话框表单,可以在数据库中插入一些数据。验证完所有内容后,表单信息将转换为数据库对象(我使用linq to sql)并提交。 由于我使用jqueryajax进行此操作,因此我有一个success函数,它向用户显示一些消息(只是通知用户他的操作成功),关闭对话框并刷新主页。这就是问题所在,由于出现了一个奇怪的下载窗口,询问我是否要下载控制器操作(您将看到我的代码),所以没有任何成功操作发生 以下是简化的代码: JQuery提交功能 //Submete a nova s

我的情况是:我有一个对话框表单,可以在数据库中插入一些数据。验证完所有内容后,表单信息将转换为数据库对象(我使用linq to sql)并提交。 由于我使用jqueryajax进行此操作,因此我有一个success函数,它向用户显示一些消息(只是通知用户他的操作成功),关闭对话框并刷新主页。这就是问题所在,由于出现了一个奇怪的下载窗口,询问我是否要下载控制器操作(您将看到我的代码),所以没有任何成功操作发生

以下是简化的代码:

JQuery提交功能

     //Submete a nova solicitão ao servidor e atualiza a página em caso de sucesso
            $("#novaSIForm").submit(function (e) {
                e.preventDefault();
                $.ajax({
                    type: "Post",
                    url: $(this).attr("action"),
                    cache: false,
                    data: $(this).serialize(),
                    success: function (data) {
                        //Fecha a modal
                        $("#novaSIModal").dialog("close");
                        //Após a requisição ter sucesso, atualiza a página
                        $("#SiContainer").load('@Url.Action("SolicitacoesInternas")');

                        alert(data.msg);
                    },
error: function (jqr, errorStatus, errorThrow) {
                    alert("Erro ocorrido " + errorStatus);
                }
                });

                return false; //Isso faz com o que o form não execute sua ACTION
            });
行动

public ActionResult SiNovaSI(ChamadoViewModel chVM, string tituloChamado)
        {
            try
            {
                CHAMADO ch = new CHAMADO();

                ch.InjectFrom(chVM);//Injeta os valores da ViewModel no novo Chamado criado
                //Seta outras propriedades que não foram injetadas anteriormente
                ch.DATAINICIO = DateTime.Now;
                ch.SOLICITANTE = ((USUARIO)Session["UsuarioLogado"]).NOMEREDUZIDO;
                ch.STATUS = "SOLICITADO";
                ch.VALORDEBITO = ((DEBITO)Session["Debitos"]).VALORPARCELA;


                ChamadoManager chMan = new ChamadoManager();

                chMan.InsertCHAMADO(ch);//Insere o novo chamado no banco de dados

                return Json(new { sucesso = true, msg = "Chamado cadastrado com sucesso" });
            }
            catch (Exception e)
            {
                return Json(new { sucesso = false, algo = "Nao foi possível registrar o chamado. Erro: " + e.Message });
            }

        }
图像


哦,我忘了提到我已经包含了所有必要的jquery脚本。包括一些MS Ajax脚本(即使我不再使用它)。

在Ajax调用中,可能需要明确指定Json作为您期望的返回类型:

dataType: "json",
如果此
#novaSIForm
是动态生成的(可能是在AJAX调用之后),则可能会丢失
。如果替换DOM元素,则提交
处理程序。因此,您可以使用
.live
方法。还要确保此事件订阅发生在
文档.ready
事件处理程序中(如果您使用的是
.submit
而不是
.live


还可以使用FireBug检查正在发送的实际AJAX请求,并且没有出现javascript错误。

尽管我昨天没有发布,但我尝试传递了几种不同的数据类型,但没有一种成功,包括json。事实上,我已经在2分钟前测试过了。谢谢你的正确答案。似乎DOM元素正在被替换。现在我不明白的是,考虑到昨天的尝试,为什么它今天起作用了。事实上,使用“.live”已经两次触发了我的提交事件。无论如何,谢谢你的快速回答。@Adriano RR,也许你还有另一个
。提交
事件注册?除了
.live
。您实际上看到FireBug中触发了2个AJAX请求?除非我的Html.BeginForm()触发了它自己的提交,否则我不会进行任何其他提交。是我的对话框按钮通过$(“#novaSIForm”).submit()调用我的提交。是的,firebug显示了2个POST请求和2个GET(这是由于my.load事件)。是否要查看整个代码?@Adriano RR,如果您通过从提交处理程序返回false来正确取消默认提交,则表单不应提交两次。我能想到的唯一一件事是,不知何故,有两个为该表单注册的.submit处理程序。第一次启动submit操作时,它只发生一次。但如果尝试进行第二次插入,submit将触发两次。似乎我并没有通过调用load事件来替换DOM。也许我不应该从ajax成功函数内部调用load事件。
$('#novaSIForm').live('submit', function() {
    ...
    return false;
});