Вопрос по asp.net-mvc, jquery – Разница между $ .getJSON () и $ .ajax () в jQuery

58

Я вызываю действие 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);
  }
});

Оба достигают метода действия, но значение PatientID равно нулю с вызовом $ .ajax. Я хотел бы использовать вызов $ .ajax для некоторых расширенных обратных вызовов.

Любые мысли приветствуются.

Ваш Ответ

7   ответов
0

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

это не работает для меня. Другой синтаксис в порядке. Указанный вами параметр имеет правильный формат.

4

которое я вижу, состоит в том, что getJSON выполняет запрос GET вместо POST.

Error: User Rate Limit Exceeded ChrisP
19

..ajax, но она обеспечивает более простую сигнатуру метода, так как некоторые настройки по умолчанию установлены, например, dataType в json, тип для получения и т. д.

N.B .load, .get и .post также являются простыми обертками для метода .ajax.

6

таких как $ .ajax, $ .get, $ .post, $ .getScript, $ .getJSON. В чем разница между ними, которая является лучшей, которая является быстрой, которая использовать и, когда это так, ниже их описание, чтобы прояснить их и избавиться от этого типа путаницы.

Функция $ .gettJSON () является сокращенной Ajax-функцией (внутренне использует $ .get () со сценарием типа данных), которая эквивалентна приведенному ниже выражению. Использует некоторые ограниченные критерии, такие как тип запроса GET и тип данных JSON.

Прочитайте больше ..JQuery-пост-против-получить VS-Аякса

Error: User Rate Limit Exceeded
0

только вы можете отследить успешный обратный вызов, и не поддерживаются стандартные настройки, такие как beforeSend, statusCode, mimeType и т. д., если вы хотите использовать $ .ajax ().

35

Content-type

Вам не нужно указывать этот тип контента при вызовах действий контроллера MVC. Специальное приложение / json; кодировка = UTF-8 & Quot; Тип содержимого необходим только при вызове ASP.NET AJAX & quot; ScriptServices & quot; и методы страницы. jQuery's contentType по умолчанию для application / x-www-form-urlencoded & quot; подходит для запроса действия контроллера MVC.

Подробнее об этом типе контента здесь:Перехват JSON и как ASP.NET AJAX 1.0 предотвращает эти атаки

Data

Данныеis исправить как есть. Передавая jQuery объект JSON, как и у вас, он будет сериализован в качестве PatientID = 1 в данных POST. Эта стандартная форма показывает, как MVC ожидает параметры.

Вам нужно только заключить параметры в кавычки, подобные & quot; {"PatientID". : 1} & quot; когда вы используете службы ASP.NET AJAX. Они ожидают, что будет проанализирована одна строка, представляющая объект 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);
  }
});
Error: User Rate Limit Exceeded ChrisP
Error: User Rate Limit Exceededcode.google.com/p/jquery-json
11

замещать

data: { patientID: "1" },

с

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

Дальнейшее чтение:3 ошибки, которые следует избегать при использовании jQuery с ASP.NET

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcode.google.com/p/jquery-jsonError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded ChrisP

Похожие вопросы