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

Chr*_*isP 58 asp.net-mvc jquery

我正在调用ASP.NET MVC操作

public JsonResult GetPatient(string patientID)
{
...
Run Code Online (Sandbox Code Playgroud)

来自JavaScript使用jQuery.以下呼叫有效

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

而这一个则没有.

$.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);
  }
});
Run Code Online (Sandbox Code Playgroud)

两者都达到了action方法,但是对于$ .ajax调用,patientID值为null.我想使用$ .ajax调用来进行一些高级回调.

任何想法都赞赏.

Dav*_*ard 35

内容类型

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

有关该内容类型的更多信息,请参阅: JSON Hijacking以及ASP.NET AJAX 1.0如何避免这些攻击

数据

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

当您使用ASP.NET AJAX服务时,您只需将参数括在引号中,如"{'patientID':1}".他们希望解析出代表JSON对象的单个字符串,而不是POST数据中的各个变量.

JSON

在这种特定情况下,这不是问题,但是养成在JSON对象中引用任何字符串键或值的习惯是个好主意.如果您无意中使用JavaScript保留关键字作为对象中的键或值,而不引用它,则会遇到令人困惑的调试问题.

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

因此,假设您确实想要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);
  }
});
Run Code Online (Sandbox Code Playgroud)


red*_*are 19

.getJson只是.ajax的一个包装器,但它提供了一个更简单的方法签名,因为一些设置是默认的,例如dataType到json,类型得到等等

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


rpc*_*tts 11

更换

data: { patientID: "1" },
Run Code Online (Sandbox Code Playgroud)

data: "{ 'patientID': '1' }",
Run Code Online (Sandbox Code Playgroud)

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

  • 这不一定是数据:'{patientID:"1"}',以避免嵌套的双引号? (2认同)

小智 6

在jquery的一些函数中存在很多混淆,比如$ .ajax,$.get,$ .post,$ .getScript,$ .getJSON,它们之间的区别是哪个是最好的,哪个是快的,哪个是使用时,以下是对它们的描述,使它们清楚,并摆脱这种类型的混淆.

$ .gettJSON()函数是一个简写的Ajax函数(内部使用带有数据类型脚本的$ .get()),它相当于下面的表达式,使用一些有限的条件,比如Request类型是GET,数据类型是json.

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