Javascript jQuery:从AJAX请求调用函数

Javascript jQuery:从AJAX请求调用函数,javascript,jquery,ajax,datatables,generic-handler,Javascript,Jquery,Ajax,Datatables,Generic Handler,我试图在ajax调用成功时调用函数,但它不起作用。这就是我到目前为止所尝试的 function dtMRPReasonCode(dt) { var data = null; jQuery.ajax({ type: "POST", data: {}, url: "Index.aspx/getMRPReasonCodeReport", contentType: "application/json; charset=ut

我试图在ajax调用成功时调用函数,但它不起作用。这就是我到目前为止所尝试的

function dtMRPReasonCode(dt) {
    var data = null;

    jQuery.ajax({
        type: "POST",
        data: {},
        url: "Index.aspx/getMRPReasonCodeReport",
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function(msg) {
            if (msg.d) {
                console.log(dt);
                console.log(msg.d);
                buildTableBody(dt, msg.d);
            }
        },

        error: function(xhr, ajaxOptions, thrownError) {
            alert("Error: dtMRPReasonCode");
        }
    });

    return false;

}

function buildTableBody(dt, obj) {   
    dt.fnClearTable();
    data = [];

    $(obj).each(function(index, value) {
        element = [];

        element.push(value.Metric);
        element.push(value.Region);
        element.push(value.Plant);
        element.push(value.Customer);
        element.push(value.IMAC);
        element.push(value.NotFilled);
        element.push(value.Filled);
        element.push(value.Total);

        data.push(element);
    });

    dt.fnAddData(data);
}
提前谢谢

编辑#1 我使用了
console.log
来向您展示我从
dt
msg.d
获得的信息(图)

编辑#2 如果我从
success:
处理程序中的
buildTableBody
函数粘贴命令,而不是在
success:
处理程序中调用
buildTableBody
函数,那么它实际上可以工作:

function dtMRPReasonCode(dt) {
    var data = null;

    jQuery.ajax({
        type: "POST",
        data: {},
        url: "Index.aspx/getMRPReasonCodeReport",
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function(msg) {
            dt.fnClearTable();
            data = [];

            $(msg.d).each(function(index, value) {
                element = [];

                element.push(value.Metric);
                element.push(value.Region);
                element.push(value.Plant);
                element.push(value.Customer);
                element.push(value.IMAC);
                element.push(value.NotFilled);
                element.push(value.Filled);
                element.push(value.Total);

                data.push(element);
            });

            dt.fnAddData(data); 
        },

        error: function(xhr, ajaxOptions, thrownError) {
            alert("Error: dtMRPReasonCode");
        }
    });

    return false;
}

但这对我来说毫无意义,因为这实际上应该在两个方面都起作用。

非常确定您的函数调用中有输入错误

buildTableBody(td, msg.d);
应该是

buildTableBody(dt, msg.d);

还有
Index.aspx/getMRPReasonCodeReport
的返回类型是什么?如果是
string
,则必须先取消对字符串的扫描,然后才能将其视为JSON。

尝试从AJAX调用中删除
contentType:“application/JSON utf-8”
。这是发送到服务器的数据类型。您可能需要默认的内容类型

除非您的服务器端资源配置为接受json,否则它可能会接受
application/x-www-form-urlencoded


你得到了什么?什么告诉你它不起作用了?它肯定会成功吗?在
success
中,发出警报以显示
td
msg.d
。在这里发布您的结果。另一个一般性评论-您似乎发布了一个空对象来“获取”数据(getMRPReasonCodeReport)。。您真的应该使用HTTP GET来代替。@BLSully,我将把这一点添加到我不使用ASMX/ASPX的原因列表中。)ASPX/asmxwebservice方法需要OP在处理JSON序列化时提供的contentType;charset=utf-8与ASMXIm不是100%正这是这里的问题,但我以前遇到过这个问题。如果不看到服务器端代码/配置等,很难判断,但值得一试:)事实上,它返回一个通用列表。