Метод MVC JSON, возвращающий неверный JSON в JQuery? - PullRequest
1 голос
/ 29 апреля 2011

У меня проблемы с анализом Jquery JSON, который я отправляю обратно ... однако это очень странно, потому что я использую метод JSON MVC.

Вот мои настройки.У меня есть очень простая функция:

$.ajax({
    url: URLd,
    dataType: 'json',
    data: { Year: $('#VehicleYear').val(), Value: request.term },
    success: function (data, textStatus, jqXHR) { alert("Success!"); },
    error: function(XMLHttpRequest, textStatus) {  
        alert(textStatus + ": " + XMLHttpRequest.responseText);  
    }  
});

Она всегда запускает функцию ошибки, которая показывает:

parsererror: [{"Value": "Toyota", "ID": 160}]

Я не могу понять, почему в мире это происходит ... это работало с более старой версией JQuery - и я прочитал, что анализатор JQuery JSON немного болеестрого сейчас, но я не могу понять, что не так с моим JSON.

Даже если это не так, это очень расстраивает, потому что я использую функцию JSON *1016* MVC для генерации этого:

public ActionResult GetVehicleModels(int Year, int MakeID, string Value = null)
{
    var modlMatchs = (from VMYX in ent.VehicleMakeYearXREFs
                        join VM in ent.VehicleModels
                        on VMYX.VehicleModelID equals VM.VehicleModelID
                        join VMa in ent.VehicleMakes
                        on VM.VehicleMakeID equals VMa.VehicleMakeID
                        where VMYX.ModelYear == Year && VMa.VehicleMakeID == MakeID && VM.VehicleModelName.StartsWith(Value)
                        orderby VMa.VehicleMakeName
                        select new { Value = VM.VehicleModelName, ID = VM.VehicleModelID }).Distinct().Take(10).ToList();

    return this.Json(modlMatchs, "application/json", JsonRequestBehavior.AllowGet);
}

Я долженупустить что-то поразительно очевидное ... все еще осваиваю JQuery / MVC, но эти вещи действительно замедляют мой прогресс.

Конечно, результат JQuery выглядит следующим образом (согласно панели инструментов разработчика Chrome)

[{"Value":"Toyota","ID":160}]

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Измените ваш dataType в вызове jQuery AJAX на "text json". Я подозреваю, что может быть проблема с заголовком типа содержимого ответа, или что-то еще, что заставляет jQuery не признавать dataType как json. Использование «text json» приведет к тому, что jQuery примет его как открытый текст перед преобразованием его в объект js.

0 голосов
/ 29 апреля 2011
var parsed = jQuery.parseJSON('[{"Value":"Toyota","ID":160}]');

Я только что попробовал вышеизложенное, и он хорошо разбирает его, однако помните, что он возвратил его как одну запись в массиве (из-за возврата IEnumerable из C #).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...