仍在使用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知道它是一个控制器。
答案 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!