2016-09-18 2 views
0

하루 종일 나는 문제를 해결하려고 노력하지만 성공하지는 못한다. 양식이 메시지를 보내지 않고 오류가 기록되지 않습니다.아약스 문의 양식은 이메일을 보내지 않는다

form.html

   <div class="ok" id="ok"></div> 
       <div id="data">    
       <div id="alert" class="alert_ig"></div> 
       <form id="form" class=" clearfix"  method="POST" action=""> 

     <div class="col-sm-12"> 
      <div class="form-group"> 
      <input name="name" type="text" id="name" value="{$smarty.cookies.nameuser}" class="form-control" placeholder="Name"/> 
      </div> 
     </div> 


     <div class="col-sm-12"> 
      <div class="form-group"> 
      <input name="email" type="email" id="email" value="{$smarty.cookies.emailuser}" class="form-control" placeholder="E-mail"/> 
      </div> 
     </div> 
     <div class="col-sm-12"> 
      <div class="form-group"> 
       <textarea id="message" class="form-control" rows="5" name="text" placeholder="Message"></textarea> 

      </div> 
     </div> 

         <div class="col-sm-12"> 
      <div class="form-group"> 
         <button style="margin-top:10px" id="submit" type="submit" class="bot_g">Send</button> 

          </div> 
     </div> 
        </form> 

     <script> 
    $(document).ready(function() { 
    $('#submit').click(function(e){ 
    var form = $(this); 
    var error = false; 
    if (!error) { 
     var data = form.serialize(); 
     $.ajax({ 
      type: 'POST', 
      url: '{$home}/system/modules/contacts/send.php', 
      dataType: 'json', 
      data: data, 
      success: function(data){ 
       if (data.error.length > 0) { 
        $('#alert').html(""+data['error']+""); 
        $('#email').addClass("fill"); 
       } else { 
        $('#ok').html('send.'); 
         $("#data").css("display","none"); 

       } 
      }, 
      return false; 
     )}; 
    }); 
</script> 
          </div> 

send.php

<?php 
    require_once '../../inc/core.php'; 

    $name=Text(trim($_POST['name'])); 
    $email=Text(trim($_POST['email'])); 
    $subject=Text(trim($_POST['subject'])); 
    $text=Text(trim($_POST['text'])); 


if(empty($name)){ 
$json['error'] = 'Come on, you have a name don\'t you?'; 
echo json_encode($json); 
exit; 
} 

if (mb_strlen($name) < 2 || mb_strlen($name) > 250){ 
$json['error'] = 'Your name must consist of at least 2 characters!'; 
echo json_encode($json); 
exit; 
} 

    if(empty($email)){ 
$json['error'] = 'No Email, No Message!'; 
echo json_encode($json); 
exit; 
} 

if (mb_strlen($email) < 5 || mb_strlen($email) > 64){ 
$json['error'] = 'Your email must consist of at least 5 characters!'; 
echo json_encode($json); 
exit; 
} 

if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
$json['error'] = 'Unknown characters in your e-mail!'; 
echo json_encode($json); 
exit; 
} 

if(empty($subject)){ 
$json['error'] = 'Um...yea, you have to write something to send this form.'; 
echo json_encode($json); 
exit; 
} 

if (mb_strlen($subject) < 5 || mb_strlen($subject) > 250){ 
$json['error'] = 'Your subject must consist of at least 5 characters!'; 
echo json_encode($json); 
exit; 
} 


if (mb_strlen($text) < 2 || mb_strlen($text) > 10000){ 
$json['error'] = 'Thats All? Really?'; 
echo json_encode($json); 
exit; 
} 

$mailer = new phpmailer(); 
$mailer->ContentType = "text/html"; 

$mailer->From = $email; 

    $mailer->Subject = 'New message from '.$home; 
    $mailer->Body ="Subject: ".$subject."<br/> 
      Name: ".$name."<br/> 
      E-mail: ".$email."<br/> 
      ".nl2br($text); 

    $mailer->AddAddress($setup['emailadmin'], ''); 
    $mailer->Send(); 

    $json['error'] = 0; 
    echo json_encode($json); 
?> 

내 문제는이 코드인가? 나는 ... 작업에 AJAX 및 HTML 양식을 변경

감사

이 라인 $에서
+0

1 - $ home :이 변수는 로컬 경로 또는 아파치 공용 폴더 경로를 출력합니까? 2 -이 변수 {$ home}을 어떻게 인쇄 하시겠습니까? 3 - 더 나은 방법으로 디버깅 할 수 있으려면 개발자 옵션 (마우스 오른쪽 단추로 요소 검사)을 사용하고 네트워크 탭을 열고 단추를 클릭하면 요청 데이터를 확인하고 요청을 확인할 수 있습니다 url, response. 그래서 당신은 오류 이유 –

+0

URL 작업을 식별 할 수 있습니다. $ 홈 = (내 사이트 URL) – Martinovska

+0

웹 사이트 내부에서이 경로는 파일의 경로입니다 : /system/modules/contacts/send.php 또는/var/www/html/system/modules/contacts/send.php –

답변

0
var form = $(this); 

(이)이 send.php 형식을 사용하지만, 수도 있어야합니다; 제출 버튼을 참조하므로 var form은 양식 요소 자체 대신 제출 버튼을 저장합니다.

클라이언트 쪽에서 오류가 표시되지 않지만 서버 쪽에서 보낸 데이터를 디버깅하려고하면 잘못된 것이 표시됩니다.

$ (this)를 양식 요소와 일치하는 선택자로 바꾸십시오.

또한 서버가 500 오류와 같은 오류를 반환 할 때 사용자에게 알리려면 오류 콜백을 이미 성공 콜백과 함께 $ ajax 함수에 추가 할 수 있습니다.

여기를 보시려면 http://api.jquery.com/jquery.ajax/ 설명서를 참조하십시오.

또한 ajax 제출을 수행하려는 경우 양식 제출의 기본 조치를 방지하기 위해 이벤트 핸들러 끝에 e.preventDefault()를 추가하십시오.

+0

시도해보십시오. – Martinovska

+0

귀하의 URL도 잘못되었을 수 있습니다. 나는 자바 스크립트가 {$ home}이 무엇인지 알 수 없다. 디버깅을 위해 하드 코딩 해보십시오. 또한, 가지고있는 곳에서 return false를 제거하십시오. 나는 그것이 성공 방법 후에 아무 것도하지 않는다고 생각한다. – klikas

+0

나에게 간단한 것을주고 싶습니까? 문제를 해결할 수 없습니다. – Martinovska

관련 문제