1

I'm trying to call a function when I get success from my ajax call, but it's not working. This is what I've tryed so far.

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

enter image description here Thanks in advance!

Edit #1

I used console.log in order to show you what I got from dt and msg.d (Image)

Edit #2

If I paste the commands from buildTableBody function in the success: handler instead of calling buildTableBody function in the success: handler it actually works:

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

But it makes no sense to me, since this actually should work in both ways.

4

2 に答える 2

1

contentType : "application/json utf-8"AJAX 呼び出しから削除してみてください。これは、サーバーに送信されるデータのタイプです。多くの場合、既定のコンテンツ タイプが必要です。

サーバー側のリソースがjsonを受け入れるように構成されていない限り、受け入れる可能性がありますapplication/x-www-form-urlencoded

http://api.jquery.com/jQuery.ajax/

于 2012-06-22T21:21:22.643 に答える
1

関数呼び出しにタイプミスがあることを確認してください

buildTableBody(td, msg.d);

する必要があります

buildTableBody(dt, msg.d);

また、からの戻り値の型はIndex.aspx/getMRPReasonCodeReport何ですか? である場合はstring、JSON として扱う前に文字列のエスケープを解除する必要があります。

于 2012-06-22T21:20:20.943 に答える