2012-06-22 7 views
1

Я пытаюсь вызвать функцию, когда получаю успех от моего вызова ajax, но он не работает. Это то, что я пробовал до сих пор.jQuery: вызов функции из запроса 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); 
} 

enter image description here Заранее спасибо!

Изменить # 1

Я использовал console.log для того, чтобы показать вам, что я получил от dt и msg.d (Изображение)

Edit # 2

Если я вставляю команды из buildTableBody функции в success: обработчик вместо вызова buildTableBody функция в обработчике success: фактически работает:

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

Но это не имеет для меня никакого смысла, поскольку это на самом деле должно работать в обоих направлениях.

+0

Что вы получаете? Что говорит вам, что он не работает? –

+0

Это определенно возвращается как успех? –

+0

Не 'td' в вашей функции вызывать опечатку? Кроме того, проверьте наличие ошибок в консоли. – Styxxy

ответ

1

Уверен, у вас есть опечатка на вашем вызове функции

buildTableBody(td, msg.d); 

должен быть

buildTableBody(dt, msg.d); 

Кроме того, что тип возвращаемого из Index.aspx/getMRPReasonCodeReport? Если это string, вы должны освободить строку, прежде чем вы сможете рассматривать ее как JSON.

+0

Фактически, он возвращает общий список. – Eder

1

Попробуйте удалить contentType : "application/json utf-8" с вашего звонка AJAX. Это тип данных, отправленных на сервер. Вероятно, вам нужен тип контента по умолчанию.

Если только на стороне сервера ресурс был настроен на прием JSON это вероятно принимает application/x-www-form-urlencoded

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

+1

Методы webservice ASPX/ASMX нуждаются в типе contentType, предоставляемом OP при работе с сериализацией JSON. – BLSully

+0

http://stackoverflow.com/questions/900231/asmx-webservice-not-returning-json-can-only-post-using-application-x-www-form-u – marteljn

+0

Интересно, что у меня был только успех используя 'application/json; charset = utf-8' с ASMX – BLSully