2012-11-12 4 views
0

나도 같은 일반적인 AJAX 코드를 사용하여 여러 연락처 양식이 있습니다 요컨대오류 메시지

$(document).ready(function() { 
    $('#mainMail').submit(function() { 
     $.ajax({ 
      type: "POST", 

      url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php", 
      data: $(this).serialize(), 
      success: function() { 
        $('#enquiryBox #submitSuccess').removeClass('hidden'); 
        setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);  
       }, 
      error: function() { 
       $('#enquiryBox #submitFail').removeClass('hidden'); 
       setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000); 
      } 
      }); 
     return false; 
    }); 
}); 

, 성공적 형식과 (process.php를 통해) 이메일 나를 제출 #submitSuccess div가 표시됩니다. 문제는 실패했을 때 div (#submitFail div 숨겨진 상태)입니다.

나는 process.php가 성공적으로 호출되지 않은 경우에만 ajax 게시 실패가 발생하기 때문이라고 추측합니다. 이것을 조정할 방법이 없으므로 process.php를 통해 전자 메일이 전송되지 않으면 사용자에게 오류 메시지가 표시됩니다.

여기 내 process.php 코드입니다 :

<?php 

$robotest = $_POST['robotest']; //just testin' for robots 

$recipient = "[email protected]"; //recipient 
$email = ($_POST['email']); //senders e-mail adress 

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) { 

$Name = ($_POST['name']); //senders name 

$mail_body = "Hello, \r\n \r\n"; 
$mail_body .= "You have received a new booking with the following details: \r\n\r\n"; 
$mail_body .= "{$_POST['comments']}; \r\n \r\n"; 
$mail_body .= "Please respond to the customer within 30 minutes on the following phone number: {$_POST['phone']} \r\n"; 
$mail_body .= "Warm regards, \r\n"; 
$mail_body .= "Robot. \r\n"; 



$subject = "Free Consult Inquiry"; //subject 
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields 

mail($recipient, $subject, $mail_body, $header); //mail command :) 

} else { 
    print "You've entered an invalid email address!"; 
} 
?> 

합니다 (print "you've entered an invalid email address!"했다 나의 오류 메시지에서 시도,하지만 작동하지 않습니다 중 하나 ...) 오류 블록에이 줄 $("#enquiryBox #submitSuccess").addClass('hidden'); 추가

답변

1

HTTP 오류 코드를 반환하여 오류를 나타낼 수 있습니다 (예 :

} else { 
    header("HTTP/1.1 500 Internal error"); 
    print "You've entered an invalid email address!"; 
} 
+0

눈부신데, 훌륭하게 작동합니다. 건배! – Jascination

1

당신이 manual entry on jQuery.ajax()을 읽을 경우뿐만 아니라,

$.ajax({ 
     type: "POST", 

     url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php", 
     data: $(this).serialize(), 
     success: function() { 
       $('#enquiryBox #submitSuccess').removeClass('hidden'); 
       setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);  
      }, 
     error: function() { 
      $('#enquiryBox #submitFail').removeClass('hidden'); //why do you remove class 'hidden' and add it later too ?? 
      $("#enquiryBox #submitSuccess").addClass('hidden'); //added line here 
      setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000); 
     } 
     }); 
0

, 당신은 프로토콜이나 네트워크 오류가 발생하면 오류 이벤트가 발생하는 것을 확인할 수 있습니다. 스크립트가 false, null 또는 그와 비슷한 것을 반환하면 여전히 유효한 응답으로 간주되므로 문제가됩니다.

그런 경우 모든 호출이 하나의 메서드 호출을 끝내고 오류 이벤트가 호출되면 동일한 메서드를 호출하여 다시 작성된 오류 메시지가 표시되도록 작성합니다.