2016-01-15 1 views
0

Я использую Wordpress Contact form 7 и хочу настроить его поведение. Насколько я понимаю, он использует форму jQuery для отправки формы и получения ответа. Я хочу изменить его «успех»/прочитать поведение, чтобы сделать это, мне нужно знать, что функция r(), которая используется формой jQuery, выполняется, и на сервере был ответ, возможно, я тоже мог бы прочитать этот ответ. Но я не могу понять, как это можно сделать, я знаю, что есть функция $.when, но это мне не помогает, она не видит r(), возможно, она находится в другом скрипте и в другой переменной зонеjQuery, как в прочитанном Wordpress Форма контакта 7 Ответ AJAX JSON от другой функции

(function ($, root, undefined) { 
     $(function(){ 
      $(document).ready(function(){ 
       $('.wpcf7-submit').click(function(){ 
        //$(this).parents('.wpcf7-form') 
        //console.log(arguments.callee.toString()); 

        $.when(r).then(function(data, textStatus, jqXHR) { 
             alert(jqXHR.status); 
            }); 

        //$(document).ajaxStop(function() { 
        // // 0 === $.active 
        //}); 
       }); 

      }); 
     }); 
})(jQuery, this); 

Как я могу найти форму jQuery? Могу ли я прочитать ответ от моей функции в другом скрипте?

+0

Что такое r? Я не думаю, что это будет правильный объем, вместо этого попробуйте jQuery.ajax. – David

+0

r() является функцией компонента jQuery Form. Он используется для отправки/получения данных из формы. Как я понимаю, я должен дождаться, пока это будет сделано, а затем как-то сделайте JSON и сделайте все, что мне нужно ... – NIck

+0

да, но это локальная переменная внутри функции ajax, а не глобальный объект, такой как jquery, поэтому вы не можете позвонить он в вашем документе готов – David

ответ

1
$(document).ajaxComplete(function(e, xhr, settings) { 
      if(e.currentTarget.activeElement.className == 'wpcf7-form-control wpcf7-submit'){ 
      //console.log(xhr); 
      if(xhr.responseJSON.mailSent == false){ 
       var formID = xhr.responseJSON.into; 
       /////////////////////////////////// to do something 
      } 
      } 
    }); 

Я думаю, что нашел решение через простой ajaxComplete, вы также можете отправить его Отправить событие щелчка, чтобы избежать ненужных проверок. Но я не уверен, что это сработает. Я имею в виду, что событие ajax будет обработано до того, как оно будет отправлено. Поэтому я сделал простой ajaxComplete с проверкой того, какой элемент отправляет его и считывает ответ с сервера. Меня устраивает.

+0

Только что проверили это, чтобы поймать ошибку, вызванную общим кэшем W3 в контактной форме 7. Отлично работает! Благодарю. –