使用Jquery调用MVC4 Ajax,应该是Post还是Get?

时间:2013-11-19 05:27:08

标签: jquery ajax asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

在一个应用程序中,我使用Jquery和MVC4,我需要在服务器上查询数据。我理解JQuery为Ajax请求提供了多种方法,但我没有得到应该使用哪种特定方法?

我将传递参数并接收一些数据,并且在请求失败或超时的情况下我需要做一些事情。请告知我应该采用哪种方法。

干杯

5 个答案:

答案 0 :(得分:4)

关于 POST vs GET 困境,这是一个设计问题,而不是可用性问题。如您所知,jQuery允许您发出 POST GET 请求。

我列出了使用 GET 请求的一些内涵:

  • 服务器对 GET 请求的响应可能会被浏览器缓存,因此如果您在后续请求中返回不同的内容,请不要使用 GET
  • 根据HTTP规范, GET 请求不应在服务器端造成任何副作用。
  • 您通过 GET 请求传输的所有信息都会被编码为网址的一部分。请准备好可以从其他地方(例如其他网站,论坛或网络爬虫)访问此URL。
  • 由于上述情况,使用 GET ,您没有任何可靠的保护措施cross-site request forgery
  • 默认情况下,ASP.NET MVC禁止服务器响应AJAX GET 请求。您可以禁用此行为(有关代码示例,请参阅this question)。
  • 浏览器(有时是服务器)对URL的长度施加限制。根据经验,2000个字符是安全的。 (有关详细信息,请参阅this question。)

This question提供了有关该主题的更多信息,Wikipedia on HTTP protocol也是如此。

如果您不确定您的AJAX API是否满足 GET 请求的要求,请使用 POST

答案 1 :(得分:1)

使用 $.ajax

   var fruit = 'Banana';

$.ajax({
        url: ajaxurl,//your url
        type"'POST',//also can set GET             
        data: {//passing parameter
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            // This outputs the result of the ajax request
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });

参见 more about ajax sample

答案 2 :(得分:0)

如果请求中的任何数据发生变化,我应该使用post方法。如果只获取一些数据,请使用get方法 从技术上讲,您可以使用任何您想要的方法。在语法上它会起作用,但在语义上它是错误的。如果您更改任何方法的状态,则应使用POST方法,因为可以调用GET方法,只需在浏览器地址栏中键入请求URL即可。 例如,您在控制器中有一个允许get方法调用的delete方法。网页抓取工具(谷歌或任何搜索引擎)点击您的网页:http://myurl.com/user/delete/1并繁荣。从您的数据库中删除ID为1的用户 当我说改变意味着你在持久数据上运行删除,更新或插入方法时,你应该使用post方法,或者在webapi的情况下使用适当的方法(DELETE,PUT,PATCH,POST)。 我认为this文章可以帮助深入挖掘 little

答案 3 :(得分:0)

为了从服务器端获取数据,我们应该使用GET,而为了更新服务器端的数据,我们应该使用POST方法。

尝试像这样使用。

function yourFunc() {


$.ajax({
    type : 'POST',
    url : 'yourcontroller/action',
    contentType : "application/json; charset=utf-8",
    dataType : 'json',
    data : param,
    async : false,
    cache: false,
    success : function(dataList) {
        //alert("dataList ---> "+dataList); 



    },

    error : function(XMLHttpRequest, textStatus, errorThrown) {
        //alert(XMLHttpRequest + " - " + errorThrown);
    }
});


}

像这样在param变量中传递参数。

var param;      
param={param1:"val",param2:"val", param3:"val"};

希望这会对你有所帮助。

答案 4 :(得分:0)

由于您正在请求某些数据,并且作为响应,您从数据库中获取了一些数据,因此您可以使用Ajax post或getJson。我觉得使用getJson很好,你将序列化数据并将其发送回视图,或者你只需​​使用MVC本身提供的JsonResult。

Http Get和Http Post之间的区别总是令许多开发人员感到困惑。从指定资源获取方法请求数据,post方法将要处理的数据提交到特定资源。通过get方法传递的参数附加在url和post方法参数中。

<script type="text/javascript">
  $(document).ready(function () {
    $('#btnGetValue').click(function () {
       //Requesting controller action from getJson
        $.getJSON("/Home/GetJsonData", null, function (data) {
            var div = $('#ajaxDiv');
            div.html("<br/> " + "Persons received from server: " + "<br/>");
            $.each(data, function (i, item) {
                //This is where you'll get all the items returned from the controller.
                printPerson(div, item);
            });
        });
    });
});
</script>

并在控制器中,

 public JsonResult GetJsonData()
    {
        var persons = new List<Person>
                          {
                              new Person{Id = 1, FirstName = "F1", 
                                  LastName = "L1", 
                                  Addresses = new List<Address>
                                                  {
                                                      new Address{Line1 = "LaneA"},
                                                      new Address{Line1 = "LaneB"}
                                                  }},

                              new Person{Id = 2, FirstName = "F2", 
                                  LastName = "L2", 
                                  Addresses = new List<Address>
                                                  {
                                                      new Address{Line1 = "LaneC"},
                                                      new Address{Line1 = "LaneD"}
                                                  }}};

        return Json(persons, JsonRequestBehavior.AllowGet);
    }

您可以使用getJson来加载下拉列表,填充其他控件,列表或其他内容。 进一步阅读getJson和Json结果是JSON with MVC 4 JsonResult