$ .getJSON не работает - PullRequest
       5

$ .getJSON не работает

1 голос
/ 05 сентября 2011

Я почти весь день смотрю на эту проблему и понятия не имею, почему она не работает.У меня есть следующее действие контроллера

public JsonResult GetSubCategory(int category) {
            //var subCat = db.categories.Where(c => c.parentID == category).Select(c => new {c.ID, c.codeDesc}).ToList();
            var subCat = from c in db.categories
                         where c.parentID == category
                         select new
                         {
                             ID = c.ID,
                             codeDesc = c.codeDesc
                         };

            return Json(subCat); 
}

У меня есть следующий метод jquery в моем файле View

$("#catList").change(function () {
    alert("In the change event. cat val is " + $("#catList").val());
    var category = $("#catList").val()
    $.getJSON("/Issues/Search/GetSubCategory", { 'category': category },
        function (data) {
            alert("in the func"); 
            $("#subCatList").options.length = 0; 
            $(data).each(function () {
                $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList");
            });
        });
});

По крайней мере, я просто хочу, чтобы отображалось предупреждение, ноне отображается.Я попробовал оба способа создания объекта subCat, как вы можете видеть в коде контроллера выше.И отладка показывает мне, что данные генерируются с полями и значениями ID и codeDesc, но на стороне View ничего не происходит.Пожалуйста, кто-нибудь может помочь выяснить, что я делаю неправильно?

Спасибо

Ответы [ 5 ]

0 голосов
/ 06 сентября 2011

Спасибо за ваши полезные ответы.Как я уже говорил в своем комментарии выше, это произошло потому, что я не вызывал его с параметром POST.
Также, как справедливо заявили Джонатон и Шоути, вы также можете указать, что вы хотите, чтобы GET возвращал результаты, но из того, что ячитать это не считалось безопасным.(Я хотел бы услышать ваши комментарии, если вы не думаете, что это правда, конечно).

Спасибо

0 голосов
/ 05 сентября 2011

Как и другие предполагают, возможно, проблема заключается в том, что у вас есть ошибка в col.Вы можете попробовать использовать

$.ajax({
  url: "/Issues/Search/GetSubCategory",
  data: { 'category': category },
  success:  function (data) {
            alert("in the func"); 
            $("#subCatList").options.length = 0; 
            $(data).each(function () {
                $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList");
            });,
  error: function(){
          alert('error');
        },
  dataType: "json"
});

, если вы видите «ошибка», проблема в том, что вызов не был успешным

0 голосов
/ 05 сентября 2011

Вероятно, следует добавить точку с запятой в конце строки 3 в вашем файле View.

0 голосов
/ 05 сентября 2011

ЛЮБОЙ результат действия, который возвращает данные Json в ответ на запрос get, должен иметь:

    JsonRequestBehavior.AllowGet

В ответном заявлении. Это сделано специально для реализации MS, чтобы предотвратить атаки, связанные с Json, путем публикации ложных данных через результат действия.

так в вашем случае:

    return Json(subCat,JsonRequestBehavior.AllowGet);

Решит вашу проблему.

Кстати, еще одна причина, которая может вызвать это, - это если вы не возвращаете правильный тип MIME, но, как правило, это применимо только в том случае, если ваша рука кодирует обработчики результатов вместо использования MVC.

Под этим я подразумеваю, что если, скажем, вы настроены на возврат HTML (а сервер возвращает «Content-type: text / html»), то ваш Ajax-запрос на поиск Json будет молча терпеть неудачу, если только вы установите тип ответа "application / json"

0 голосов
/ 05 сентября 2011

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

.error(function() {
    alert("JSON call failed");
});

Если вы получите это предупреждение, следующий шаг - определить, почему вызов JSON не работает.

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