2013-09-20 4 views
1
(function($) 
{ 

    $.fn.makeAjaxPostCall = function(options) 
     { 
      var settings = $.extend(true,{}, $.fn.makeAjaxPostCall.defaults, options); 
      $.ajax({ 
       type: 'POST', 
       url: settings.url, 
       data: settings.data, 
       success: function(data, textStatus, xhr){ 
        if (xhr.readyState === 4 && xhr.status === 0) { 

         alert('Network Error'); 
        } 
        else {alert(data); 
         settings.callback.call(data); 
        } 
       }, 
       error: function(xhr, textStatus, errorThrown) { 
        if (textStatus !== null) { 
         alert("error: " + textStatus); 
        } else if (errorThrown !== null) { 
         alert("exception: " + errorThrown.message); 
        } 
        else { 
         alert ("error"); 
        } 
       } 
      }); 
     }; 
     $.fn.makeAjaxPostCall.defaults = { 
      type : 'POST', 
      url : '', 
      data : {}, 
      obj : $(document), 
      callback : function(data){} 
     }; 

})(jQuery); 

Это моя функция ajax. И я называю эту функциюКак передать данные ответа от ajax для функции обратного вызова?

$(document).makeAjaxPostCall({ 
    type : 'POST', 
    url : 'UpdateNodeStatus', 
    data : { 
     workshopid : 1, 
     userid : 1001, 
     level : 5, 
     nodeid : 10, 
     resolutionid : 1 
    }, 
    callback : function(data){ 
     alert(data); 
    } 
}); 

после того, как сообщение произошло, я возвращаю «истину» из сервлета.

response.setContentType("text"); 
    PrintWriter pw = response.getWriter(); 
    pw.print(true); 

Я получаю данные как «истина» в «успехе», но как «не определено» в функции обратного вызова.

Как передать данные с 'success' на функцию 'callback', чтобы использовать ее там?

+2

Если это не просто 'settings.callback (данные);'? – Archer

+0

@Archer - с помощью 'call()' должен работать, но все это похоже на простое переключение через множество обручей, чтобы создать новую функцию ajax, которая примерно такая же, как и уже доступная в jQuery? – adeneo

+0

@ Арчер - да, это работает. спасибо – Sagar

ответ

1

Вы можете direclty вызвать функцию обратного вызова без .call как следующий

settings.callback(data); 

Или Если вы хотите использовать .call затем отправить this в качестве первого аргумента .call.

if (xhr.readyState === 4 && xhr.status === 0) { 
    alert('Network Error'); 
} 
else { 
    alert(data); 
    settings.callback.call(this, data); 
} 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

Смежные вопросы