2010-11-23 2 views
0

jQuery와 PHP 폼을 사용하여 첫 번째 아약스 연락처를 만들었지 만 작동하지 않는 것 같습니다. AJAX 문의 양식에 어떤 문제가 있습니까? (PHP 메일())

내 jQuery 코드 :

var dataString = 'address=' + address + '&title=' + title + '&name=' + name + '&mail=' + mail + '&message=' + message; 
jQuery.ajax({ 
    type: "POST", 
    url: "sendmail.php", 
    data: dataString, 
    success: function() { 
     alert(dataString); 
     jQuery('#ok').html("<h2>Contact Form Submitted!</h2>") 
    } 
}); 
return false; 

코멘트 - 난`는 데이터 문자열을 표시하는 경고를 사용하여 정확히 내 문자열, 추가로이 스크립트가 항상 성공 및 표시 "문의 양식이 제출"을 보여줍니다. 이제

sendmail.php 부분 (내가 뭔가 여기에 잘못 생각) :

// getting variables from form 

$emailTo = trim($_POST['address']); 
$subject = trim($_POST['title']);; 
$name = trim($_POST['name']); 
$emailFrom = trim($_POST['mail']); 
$message = $_POST['message']; 

// prepare email body text 

$Body = "You have a message from: "; 
$Body .= $name; 
$Body .= "\n"; 
$Body .= "\n"; 
$Body .= $message; 

// send prepared message 

$sent = mail($emailTo, $subject, $Body); 

//callback for jQuery AJAX 

if ($sent){ 
    echo ''; 
} 
else{} 

어떤 아이디어가? 나는 내 $ 메시지를 다듬지는 않을 것이라는 것을 알고 있지만, 나는 단지 한 단어의 시험 메일 만 보내고있다.

모든 변수는 HTML 양식에서 가져온 것으로이 방법으로 jQuery 스크립트에 등록됩니다. var address = $ ("# cmail-address"). val(); . 어쨌든 좋은 콜백을 받고 있기 때문에 내 문제와 관련이 없습니다.

그리고 내 서버가 메시지 및 기타 스크립트를 보내도록 허용하는 방식으로 잘 작동합니다.

+0

여기서 첫 번째 행의 변수는 어디서 오는가? –

+0

HTML 폼에서 위에서 언급했듯이 나는 address = something &? title = something & (...)과 같은 문자열로주의를 끌고 있습니다. – fomicz

+0

이것은 문제가 아니지만 {address : address, title : title}과 같은 객체 리터럴을 사용하여 데이터를 나열하는 것이 더 명확 할 수 있습니다. – mveerman

답변

2

콜백 함수는 PHP 파일에서 출력 할 수있는 뭔가가 있어야 .. $ _POST 변수를 사용하여 R,하지만 GET 방식으로 보냅니다. 당신은 자바 스크립트 범위에서 같은 문자열을 경고하고 있습니다.

success: function(dataOut) { 
     alert(dataOut);  
     jQuery('#ok').html("<h2>Contact Form Submitted!</h2>") 
} 

물론 PHP는 뭔가를 울려야합니다. 나중에 물건을 다듬을 때까지 "보낸"또는 "보내지 않음"과 같이 간단 할 수도 있고 정확하게 표시하려는 메시지 일 수도 있습니다. 또한 메일을 보내려고하기 전에 어떤 메시지가 표시됩니다. 문제가 실제로 메일을 보내는 것이고 아약스는 사용하지 않는다는 것을 확인하는 데 도움이 될 수 있습니다.

"? a = 1 & b = 2 & c = 3"과 같은 문자열은 POST에는 작동하지만 이름/값 쌍 {a : "cat", b : "dog"}은 아마도 더 좋은 방법. 그와 같은 문자열은 GET 스타일이기 때문에 다른 사람이 자신의 대답을 혼란스럽게 만든 이유 일 수 있습니다.

jQuery의 게시 기능도 좋습니다. $. post와 $ .get은 더 단순하며 일반적인 Ajax 사용의 90 % (자습서 포함)를 커버합니다. $ 아약스은 가능성이 문제의 원인은 아니지만 쉽게 그 원인을 찾을 수 있도록 수, 괴짜 특별한 경우

$.post("sendmail.php", 
     {address: address, title: title, name: name...}, 
     function(d) {alert(d); $("#ok").html("<h2>" + d + "</h2>");}); 

이 지난 몇 가지 권장 사항입니다

에 꽤 많이 있습니다.

작동하지 않는 이유는 무엇입니까? PHP에 접근했지만 이메일이 전혀 전송되지 않습니까?

+0

의'jQuery.ajax' 호출에 표시된 것과 같이 데이터가 $ _POST에 있습니다. 제가 제안하는 것을 확인할 수 있다면, 문제는 아약스를 사용하지 않고 메일을 보내는 것과 분리되어 있다는 것입니다 . 그런 다음 PHP의 메일 기능을 읽고 필요한 경우 PHP 메일에 대한 질문을해야합니다 (아약스 관련 정보가 아님). –

+0

작업 중입니다. 지금이 순간 나는 $ .post로 전환했고 여전히 싸우고 있습니다. – fomicz

+0

Af, 왜 그런지는 모르겠지만 방법을 사용하면 항상 빈 경보가 나타납니다. 따라서 PHP 스크립트로 전송되는 데이터가 없습니다. Af. – fomicz

-1

당신은

+0

$ _POST를 $ _GET으로 변경해도 도움이되지 않습니다. – fomicz

+0

질문은 – rojoca

0

어둠 속에서 약간의 촬영 일지 모르지만 다른 이메일 주소로 보내려고 했습니까? PHP send mail은 메시지를 전송하는 서버의 헤더 (예 : apache)를 사용합니다. 그래서 "보내기"를 클릭하면 mail() 함수는 "x-sender : apache"메시지를 첨부합니다.

SOme 메일 서버는 인증되지 않은 서버의 메일을 허용하지 않습니다.

내가 로컬에서 개발할 때 - Gmail로 메일을 보내려고 할 때 회사의 이메일을 사용하여 블랙홀로 전송됩니다.

편집 - 오 죄송합니다. $ _REQUEST를 반향하여 모든 변수를 올바르게 전송했는지 확인하십시오. put a print_r ($ _ REQUEST); 주사위(); send_mail.php에서 결과를 관찰하십시오.

OH! 그건 그렇고. 내가 전에 그 문제를 했어 당신의

$_POST 

$_REQUEST 

에 전환 할 수 있습니다. 아래의 답변 에서처럼 POST 변수를 GET 형식으로 전달하기 때문에 실제로 POST 변수를 보내지 않을 수도 있습니다.

$emailTo = trim($_REQUEST['address']); 
$subject = trim($_REQUEST['title']);; 
$name = trim($_REQUEST['name']); 
$emailFrom = trim($_REQUEST['mail']); 
$message = $_REQUEST['message']; 

또한

print_r($_REQUEST); die(); 

그것이 전달 점점 볼려고

EDIT2 :.

당신의 의견에 따라, 당신이 불을 지르고 을 사용하십시오 방법에 대한이 이미지를 볼 수

+0

이 파일은 어떻게 아약스로 얼룩을 인쇄 할 수 있습니까? 나는 내 양식을 제출 한 후에이 파일로 리디렉션되지 않아 출력이 없기 때문에 "print_R ($ _REQUEST)을 볼 수 없습니다."라고 말합니다. – fomicz

+0

FireBug 애드온을 가지고 있습니까? 설치를 권장합니다. FB를 열고 NET 탭으로 전환 한 다음 버튼을 클릭하면 요청의 게시물 및 응답 헤더를 읽을 수 있습니다. 진행 상황을 볼 수 있습니다. –

관련 문제