Ошибка $ .getJSON в возвращаемом элементе - PullRequest
0 голосов
/ 06 мая 2009

Все еще работаю через JQuery для получения данных и повторного заполнения частей страницы. Сейчас я не могу заставить его вернуть данные, но появляется сообщение об ошибке «данные не определены».

Код:

var retrieveData2 = function(path, productGroup, productType, itemsPerPage, pageIndex, filters, fnHandleCallback) {
    $.getJSON(path
             , { productGroup: productGroup, productType: productType, itemsPerPage: itemsPerPage, pageIndex: pageIndex, filter: filter }
             , function(data) { fnHandleCallback(data); });
};

function updateNavIndex(pageIndex) {
    var filters = $("form").serialize();
    var productGroup = $("#valProductGroup").attr('title');
    var productType = $("#valProductType").attr('title');
    var itemsPerPage = $("#ItemsPerPage").val();

    retrieveData2("/CatalogAjaxController/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData(data));
}

function handleMenuData(data) {
    $("#CatalogPagingMenu").remove();

    // [http://ejohn.org/blog/javascript-micro-templating/][apply data to template]
    }

когда вызывается функция updateNavIndex, я получаю сообщение об ошибке «Ошибка выполнения Microsoft JScript:« данные »не определены».

Что мне не хватает?


ах! ближе (ответ с 1 голосом прямо сейчас) - пока не поступил вызов на сервер . Это идет непосредственно к обработчику обратного вызова. (


Получил это работает по большей части. Мой URL указывал на CatalogAjaxController. Он должен указывать на CatalogAjax, поскольку MVC знает, что это контроллер.

Ответы [ 5 ]

1 голос
/ 06 мая 2009

Вы передаете handleMenuData (данные) как функцию , вызываете , а не указатель на функцию. Вместо передачи функции она передает результат вызова этой функции.

, чтобы исправить это, вам нужно либо поместить обратный вызов в кавычки: 'handleMenuData(data)' или лучше: обернуть его во встроенную функцию function() { handleMenuData(data); }

Но похоже, что данные являются частью результата, и в этом случае вы просто удаляете аргументы из метода:

retrieveData2("/CatalogAjax/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData);
1 голос
/ 06 мая 2009

В опубликованном вами коде retrieveData2 имеет параметр с именем filters, но ваш вызов $.getJSON() передается filter: filter вместо filter: filter s :

var retrieveData2 = function(path, productGroup, productType, itemsPerPage, pageIndex, filters, fnHandleCallback) {
    $.getJSON(path
             , { productGroup: productGroup, productType: productType, itemsPerPage: itemsPerPage, pageIndex: pageIndex, filter: filter }
             , function(data) { fnHandleCallback(data); });
};

Может ли это быть причиной?

1 голос
/ 06 мая 2009

В этой строке:

retrieveData2("/CatalogAjaxController/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData(data));

данные, которые вы передаете handleMenuData, не определены в рамках функции updateNavIndex. На самом деле я не вижу, как вызывается функция updateNavIndex и как она должна знать о параметре данных.


Изменить эту строку:

retrieveData2("/CatalogAjaxController/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData(data));

до:

retrieveData2("/CatalogAjaxController/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData);

Функция retrieveData2 получает последний аргумент функции, которым в вашем случае является handleMenuData. Он будет вызывать его с параметром данных, который определен внутри retrieveData2. Поверьте, вы что-то поняли :)

0 голосов
/ 07 мая 2009

Вместо:

retrieveData2("/CatalogAjaxController/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData);

Мне нужно было сделать:

retrieveData2("/CatalogAjax/UpdateNavigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData);

Из-за моих маршрутов я изменил его на:

retrieveData2("/Catalog/Ajax/Update/Navigation", productGroup, productType, itemsPerPage, pageIndex, filters, handleMenuData);

Обратите внимание, что слово «Контроллер» не является частью пути. Слава к помощи по этому вопросу. Не совсем правильный ответ, но все ответы дали мне мясо, чтобы пройти через это. Особая благодарность Бену Шейрману за то время, которое он провел сегодня, чтобы показать мне FireBug и использование $ .ajax с частичным просмотром!

0 голосов
/ 06 мая 2009

json, возвращаемый из вашего серверного скрипта, может быть неверным или пустым Размещение серверного сценария, который генерирует JSON, поможет диагностировать это.

Получаете ли вы какие-либо ошибки в Firefox? Вы пытались просмотреть ответ сервера с помощью Firebug? Firebug неоценим для отладки подобных вещей.

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