2014-01-20 3 views
0

У меня есть контактная форма с несколькими полями ввода и div, которая действует как кнопка - когда я нажимаю на нее, она вызывает функцию, которая проверяет форму, и если все в порядке, она отправляет ее , Функция отправляет данные с входов в файл API.php, который вызывает функцию отправки в файле BusinessLogic.php. После отправки формы - функция обратного вызова должна быть активирована, и она должна анимировать div подтверждения.Функция обратного вызова jQuery не выполнена

HTML-входов:

<div id="contact_inputs_block"> 
    <div class="div_contact_form_input_box div_input_name"> 
     <input type="text" name="Name" placeholder="* Name" id="name"> 
    </div> 
    <div class="div_contact_form_input_box div_input_phone"> 
     <input type="tel" name="Phone" placeholder="* Phone" id="phone"> 
    </div> 
    <div class="div_contact_form_input_box div_input_email"> 
     <input type="email" name="Email" placeholder="* Email" id="email"> 
    </div> 
</div> 
<div class="form_confirmation_wraper"> 
    <div id="div_form_confirmation"> 
     Message sent. 
    </div> 
    <div class="div_send_form"> 

    </div> 
</div> 

Вот моя функция:

function submit_form(language) 
{ 

var email_str = $("#email").val(); 
var errors = new Array(); 

$("#contact_inputs_block>div:not(:last-child)").css({'border-color' : '#a5957e', 'background-color' : '#f8f8f8'}); 


if ($("#name").val()=="") 
{ 
    errors.push(".div_input_name"); 
} 
if(!validate_email(email_str)) 
{ 
    errors.push(".div_input_email"); 
} 
if ($("#phone").val()=="") 
{ 
    errors.push(".div_input_phone"); 
} 


if (errors.length == 0) 
{ 


    $.getJSON("inc/API.php", 
    { 
     command : "send_contact_form", 
     name : $("#name").val(), 
     email : email_str, 
     phone : $("#phone").val(), 
     message : $("#message").val().replace(/\n/g, '<br>'), 
     form_language: language 
    } ,function(){ 
     alert("sent"); 
     $("#div_form_confirmation").animate({opacity:1}, 1000, function(){ 
      setTimeout($("#div_form_confirmation").animate({opacity:0}, 3000, function(){location.reload()}),6000); 
     }); // end callback function 
    }); // end getJSON 
} // end if 
else 
{ 
    for (var i = 0; i <= errors.length; i++) 
    { 
     $(errors[i]).css({'border-color' : '#E60005', 'background-color' : '#ffc4c9'}); 
    } 
} 
} 

это функция в API.php:

include_once 'BusinessLogic.php'; 
session_start(); 

$command = $_REQUEST["command"]; 

switch($command) 
{ 
    case "send_contact_form" : 
     send_contact_form($_REQUEST["name"], $_REQUEST["email"], 
      $_REQUEST["phone"], $_REQUEST["message"], $_REQUEST["form_language"]); 
     break; 
} 

и BusinessLogic.php на самом деле отправляет почту.

почта отправляется, все в порядке. Проблема заключается в том, что функция обратного вызова submit_form() никогда не запускается, и я не вижу подтверждения того, что почта была отправлена.

Почему это происходит и как его исправить? Благодаря!

+0

Не могли бы вы предоставить html-код формы? – vooD

+0

Ваш php не возвращает JSON, в результате чего генерируется parseerror. Вместо этого используйте $ .get или измените свой php, чтобы он возвращал json. –

+0

@vooD Я обновил вопрос с помощью HTML. – Igal

ответ

2

Другой подход может использовать $ .post вместо $ .getJSON (все остальное останется неизменным). Он сделает желаемый вызов ajax. Определенные параметры будут в массиве $ _POST ($ _REQUEST is fine)

+0

Это сработало, спасибо! Интересно, что этот точный код работает для меня в моих других формах, я просто использовал его и внес некоторые правильные настройки, но по какой-то причине он не работал. Опять же, спасибо! – Igal

+0

Возможно, проблемы с перекрестными доменами? – Techek

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