2014-02-10 3 views
7

В настоящее время я переводил свои призывы ajax к регулярному звонку $.pjax(). Все работает отлично, но функция успеха ajax. Я не могу управлять тем, как вызвать функцию успеха pjax с заданными параметрами.Jquery Pjax - функция успеха Ajax

Единственное, что я могу использовать это определение pjax глобальной функции успеха будет называться на каждом pjax вызова:

$(document).on('pjax:success', function(event, data, status, xhr, options) { 

    }); 

Но, к сожалению, я хотел бы определить на вызов определенной функции успеха.

пример

Ajax вызова:

$.ajax({ 
    url:"/myPage/myFunction", 
    type:"POST", 
    data:giveMeData(), 
    success:function(data){$('#right_form').html(data);console.log('Success works!')} 
}); 

Pjax пример вызова:

$.pjax({ 
    url:"/myPage/myFunction", 
    type:"POST", 
    container:'#right_form', 
    data:giveMeData(), 
    success:function(){console.log('Success works!')} 
}); 

ответ

11

Я не верю, что библиотека JQuery PJAX поддерживает пропускание функции "успеха" непосредственно к $ .pjax хотя я подозреваю, что вы могли бы обойти это, используя $(document).on('pjax:success') callback & свой атрибут options, чтобы достичь той же функциональности.

Например, скажем, ваш запрос, как выше, но вы хотите иметь обратный вызов пользовательского успеха вы могли бы использовать что-то вроде этого:

$.pjax({ 
    url:"/myPage/myFunction", 
    type:"POST", 
    container:'#right_form', 
    data:giveMeData(), 
    custom_success:function(){console.log('Custom success works!')} 
}); 

Тогда для того, чтобы запустить метод custom_success можно зацепить до стандартного слушателя успеха pjax, и учитывая, что все параметры, предоставленные $.pjax, доступны в опциях, вы можете захватить функцию custom_success и запустить ее. Таким образом, ваш слушатель может выглядеть примерно так:

$('#right_form').on('pjax:success', function(event, data, status, xhr, options) { 
     // run "custom_success" method passed to PJAX if it exists 
     if(typeof options.custom_success === 'function'){ 
      options.custom_success(); 
     } 
}); 

Какой i * think * предоставит вам такую ​​функциональность после?

+1

Да, это именно то, что я искал. В другом решении может также использоваться параметр .done (function() {console.log()}) "postfix для каждого вызова pjax, но, вероятно, он не применяется к приложению успеха. Один большой «спасибо» снова :) – user2133627

+0

может ли кто-нибудь помочь мне с этим вопросом? https://stackoverflow.com/questions/49122972/hide-jquery-elements-in-an-ajax-function – TRS7

3

Поздний ответ, но я нашел решение here.

$.pjax({ 
    url:"/myPage/myFunction", 
    type:"POST", 
    container:'#right_form', 
    data:giveMeData(),   
}).done(function() { console.log('Success works!') }); 
Смежные вопросы