jQuery中$ .getJSON()和$ .ajax()之间的区别

我正在调用ASP.NET MVC操作

public JsonResult GetPatient(string patientID) { ... 

从JavaScript使用jQuery。 以下通话起作用

 $.getJSON( '/Services/GetPatient', { patientID: "1" }, function(jsonData) { alert(jsonData); }); 

而这一个没有。

 $.ajax({ type: 'POST', url: '/Services/GetPatient', data: { patientID: "1" }, contentType: 'application/json; charset=utf-8', dataType: 'json', success: function(jsonData) { alert(jsonData); }, error: function() { alert('Error loading PatientID=' + id); } }); 

两者都达到操作方法,但是,$ .ajax调用时,patientID值为空。 我想使用$ .ajax调用一些高级callback。

任何想法赞赏。

内容types

您不需要在调用MVC控制器操作时指定该内容types。 只有在调用ASP.NET AJAX“ScriptServices”和页面方法时,才需要特殊的“application / json; charset = utf-8”content-type。 jQuery的默认contentType“application / x-www-form-urlencoded”适用于请求MVC控制器的操作。

有关此类内容的更多信息,请参见 : JSON劫持和ASP.NET AJAX 1.0如何避免这些攻击

数据

数据正确的,因为你有它。 通过传递jQuery一个JSON对象,就像在POST数据中那样,它将被序列化为patientID = 1。 这个标准格式是MVC期望的参数。

在使用ASP.NET AJAX服务时,只需将参数括在“{'patientID':1}”中。 他们希望表示一个JSON对象的单个string被parsing出来,而不是POST数据中的单个variables。

JSON

在这个特定的情况下,这不是一个问题,但是养成在JSON对象中引用任何string键或值的习惯是个好主意。 如果您不经意地使用JavaScript保留关键字作为对象中的键或值,而不引用它,则会遇到易混淆的debugging问题。

相反,您不必引用数字或布尔值。 直接在对象中使用它们总是安全的。

所以,假设你想要POST而不是GET,你的$ .ajax()调用可能看起来像这样:

 $.ajax({ type: 'POST', url: '/Services/GetPatient', data: { 'patientID' : 1 }, dataType: 'json', success: function(jsonData) { alert(jsonData); }, error: function() { alert('Error loading PatientID=' + id); } }); 

.getJson只是一个包装.ajax,但它提供了一个更简单的方法签名,因为一些设置是默认的,例如dataType到JSON,types获取等

NB .load,.get和.post也是简单的.ajax方法的包装器。

更换

 data: { patientID: "1" }, 

 data: "{ 'patientID': '1' }", 

进一步阅读: 当在ASP.NET中使用jQuery时要避免3个错误

在jQuery的一些function,如$ .ajax,$ .get,$ .post,$ .getScript,$ .getJSON有什么是最好的,这是最快的使用和下面的时候是这样描述他们,使他们清楚,并摆脱这种types的混乱。

$ .gettJSON()函数是一个简写的Ajax函数(内部使用$ .get()和数据types脚本),相当于下面的expression式,使用一些有限的条件,比如Requesttypes是GET,datatypes是json。

阅读更多.. jquery-post-vs-get-vs-ajax

我看到的唯一区别是,getJSON执行GET请求,而不是POST。

 contentType: 'application/json; charset=utf-8' 

不好。 至less它不适合我。 其他语法是好的。 您提供的参数格式正确。

与$ .getJSON())没有任何错误callback只有你可以跟踪成功的callback,并没有支持像beforeSend,statusCode,mimeType等标准设置,如果你想使用$ .ajax()。