2010-04-03 96 views
3

我试图使用jquery.Ajax将数据发布到返回JsonResult的ASP.NET MVC2操作方法。除非响应返回到浏览器,否则它会被视为文件下载,而不是传递到成功处理程序。这里是我的代码:JsonResult在浏览器中显示一个文件下载

的Javascript:在控制器

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("form[action$='CreateEnvelope']").submit(function() { 
       $.ajax({ 
        url: $(this).attr("action"), 
        type: "POST", 
        data: $(this).serialize(), 
        dataType: "json", 
        success: function (envelopeData) { 
         alert("test"); 
        } 
       }); 
      }); 
      return false; 
     }); 
    </script> 

操作方法:

public JsonResult CreateEnvelope(string envelopeTitle, string envelopeDescription) 
    { 
     //create an envelope object and return 
     return Json(envelope); 
    } 

如果我打开下载的文件的JSON正是我要找的和MIME类型显示为application/json。我错过了什么让jquery.ajax调用接收json返回?

回答

2

您在提交事件的处理程序中缺少“返回false”。如果你不返回false,那么JQuery仍然会像通常那样通过提交。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("form[action$='CreateEnvelope']").submit(function() { 
      $.ajax({ 
       url: $(this).attr("action"), 
       type: "POST", 
       data: $(this).serialize(), 
       dataType: "json", 
       success: function (envelopeData) { 
        alert("test"); 
       } 
      }); 
      // IMPORTANT: return false to make sure the normal post doesn't happen! 
      return false; 
     }); 
     return false; 
    }); 
</script> 

你是几乎有!

+0

谢谢!首先,这是我的意图,只是把它放在了错误的地方。 – joshb 2010-04-03 15:59:08

0

我刚刚开始使用类似于此的ajax,并且看着您的代码的第一印象会表明您不需要在窗体上调用提交?你只需要做ajax调用。我可能是错的,但它可能是ajax返回的数据和页面正在刷新页面数据被替换为json数据?

+1

我正在处理提交事件,作为触发表单的ajax调用的一种方法,如果用户禁用javascript,可以正常发布。 – joshb 2010-04-03 15:37:05

+0

@josh:很好的电话! – 2010-04-03 15:57:53

相关问题