$ .ajax get, mvc 3 jsonresult - неопределенный результат - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть контроллер jsonresult MVC 3, который возвращает строку JSON, которая содержит регионы, связанные с конкретной страной, код ниже:

    public JsonResult getRegions(int countryID)
    {
        var regions = from r in db.Regions where r.CountryID == countryID select r;

        var builder = new StringBuilder();
        builder.Append("[");
        foreach (Region region in regions)
            //builder.AppendFormat("{0}, \"{1}\"", "RegionID: " + region.RegionID, "RegionName: " + region.RegionName);                
            builder.Append("{ RegionID: " + region.RegionID + ", RegionName: " + region.RegionName + "},"); 
        //var result = builder.ToString().TrimEnd(new char[] { ',', ' ' }) + "]";            
        builder = builder.Append("]");

        var result = builder.Replace(",]", "]");

        return Json(result.ToString(), JsonRequestBehavior.AllowGet);
    }

Возвращает строку в формате JSON, предположим, что выбранная страна была Кения, строка вывода выглядит следующим образом:

    [{ RegionID: 1, RegionName: Nairobi Region},{ RegionID: 3, RegionName: Coast Region}]

У меня есть javascript, который передает идентификатор страны контроллеру, чтобы получить регионы, которые я в итоге хочу использовать для заполнения нового выпадающего списка. Мой JavaScript выглядит следующим образом:

    $(document).ready(function () {
$("#CountryID").change(function () {
    $.ajax({
        type: "GET",
        url: "/ajaxcalls/getregions",
        data: "countryID=" + $("#CountryID :selected").val(),
        datatype: "json",
        success: function (result) {
            var options = ("#regions");
            $.each(result, function (item) {
                alert(item.RegionID + " " + item.RegionName);
            });
        },
        error: function (req, status, error) {
            alert(error + " " + req);
        }
    });
});
    });

Но всплывающее предупреждение гласит:

undefined undefined.

Ответы [ 4 ]

3 голосов
/ 15 ноября 2011

Я бы настоятельно рекомендовал использовать сериализатор JSON для создания строки JSON, например, JavaScriptSerializer, Json.NET's Serializer или DataContractJsonSerializer.Это сделает процесс создания JSON менее подверженным ошибкам и избавит вас от необходимости ручного свертывания:)

Похоже, что создаваемый вами JSON не является допустимым JSON: каждый ключ должен быть двойнымв кавычках, как и каждое строковое значение.

Кроме того, функция, переданная в $.each, принимает два аргумента, индекс и значение, поэтому вызов $.each внутри функции success должен быть

$.each(result, function (index, item) {
    alert(item.RegionID + " " + item.RegionName);
});
0 голосов
/ 20 августа 2012

измените свою ошибку так, чтобы она выглядела так

error: function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}

и используйте IISExpress - в встроенном VS-сервере эти свойства не генерируются.

Удачи

0 голосов
/ 15 декабря 2011

Может быть, вы можете использовать что-то вроде этого

jQuery.getJSON(url, null, function (countryString) {
        //countryString es the data returned from de action method.
    });
0 голосов
/ 15 ноября 2011

используйте result.d и получите фактические данные.Что говорит firebug?

Возможно, вы захотите прочитать это тоже.

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