返回元素上的$ .getJSON错误

时间:2009-05-06 18:16:30

标签: jquery asp.net-mvc

仍在使用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 个答案:

答案 0 :(得分:1)

在这一行:

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中定义。相信你理解的东西:)

答案 1 :(得分:1)

在您发布的代码中,retrieveData2有一个名为filters的参数,但您对$.getJSON()的调用正在传递filter: filter而不是filter: filter 小号

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); });
};

这可能是原因吗?

答案 2 :(得分:1)

您将handleMenuData(数据)作为函数调用传递,而不是函数指针。它不是传递函数,而是传递函数调用的结果。

要解决此问题,您需要将回调放在引号中:'handleMenuData(data)'或更好:将其包装在内联函数中function() { handleMenuData(data); }

但它确实看起来数据是结果的一部分,在这种情况下,您只需从方法中删除参数:

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

答案 3 :(得分:0)

从服务器脚本返回的json可能无效或完全为空。发布生成JSON的服务器端脚本有助于诊断此问题。

你在Firefox中有任何错误吗?您是否尝试使用Firebug查看服务器响应? Firebug对于调试此类事物非常宝贵。

答案 4 :(得分:0)

而不是:

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);

请注意,“控制器”一词现在不是路径的一部分。感谢对此的帮助。没有完全正确的答案,但所有答案都给了我通过这个的机会。今天有一段时间向Ben Scheirman致敬,向我展示FireBug并使用$ .ajax和Partial Views!