2017-12-16 1 views
0

새 스크립트를 작성 중이며 PHP 함수를 추가하여 전자 메일을 보내려고합니다. 자바 스크립트 함수에서 두 개의 Ajax 호출을 중첩했다. 나는 그것을 호출 할 때마다 페이지를 다시 불러 온다.AJAX를 통해 PHP 함수 호출은 페이지를 새로 고침합니다.

jquery와 JavaScript 라이브러리가 다음과 같이 포함됩니다.

<script src="assets/js/main.js"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 

내가 함수라고 부르는 버튼은 다음과 같습니다.

<button type="button" onclick="jq1()" 
         class="btn btn-primary">Submit</button> 

JavaScript 및 AJAX 기능은 내가 포함 된 라이브러리의 일부입니다. 이에 대한 자세한 내용은 다음과 같습니다.

자바 스크립트 함수는 다시 다음 AJAX를 호출

function jq1() { 

      doAjax(); 

      } 

입니다.

function doAjax() 

    { 

     var name, email, message; 
     name = JSON.stringify($('name').val(); 
     email = JSON.stringify($('email').val(); 
     message = JSON.stringify($('message').val(); 

     ajax = phpcall(name, email, message); 

    } 

그리고 여기에 실제 PHP 함수 호출을위한 Jquery가 있습니다.

function phpcall (name, email, message) 

    { 

     return $.ajax({ 

      { url: 'file.php', 
      type: 'POST', 
      data: { email: email, name: name, message: message } 

      return false; 
     }); 

    } 

PHP 명령 줄에서 테스트했으며 작동합니다. 다음은 실제 PHP 호출에 대한 세부 사항입니다.

<?php 
    function mail2() { 

     if (isset($_POST['name'])) 
      (
      $name = json_decode(sanitize($_POST['name'])); 
     ) 

     if (isset($_POST['email'])) 
     (
      $email = json_decode(sanitize($_POST['email'])); 
     ) 

     if (isset($_POST['message'])) 
      (
      $email = json_decode(sanitize($_POST['email'])); 
     ) 

     $to = "[email protected]"; 
     $subject = "Service Inquiry"; 
     $txt = $message . $email; 
     $headers = "From: [email protected]"; 

     mail($to,$subject,$txt,$headers); 
     } 
    ?> 

나는 여기에, 나는 바퀴를 개혁하고 같은 느낌 도움이되지 수, Ajax와 JQuery와에 새로운,하지만.

선언에 JQuery가 포함되어 있습니다. JSON과 AJAX에 대해 별도의 선언이 필요합니까? 제공 한 세부 사항에 구문 오류가 있습니까? 이것은 함수 호출 (JavaScript, 두 개의 중첩 된 AJAX 호출과 PHP)의 정상적인 진행일까요? 나는 프로가 한 번 봐보고 볼만한 것을 놓치고 있습니까?

+1

main.js에 jQuery가 포함 된 경우 jQuery를 포함시킨 후 포함시켜야합니다. – j08691

답변

0

숨바꼭질, 미안하지만 난 당신이 쓰는 일을 이해하지 못하는

name = JSON.stringify($('name').val(); 
먼저 엔드 브래킷 및 복구 값을에 #의 행방 불명하지만, 코드가 있어야합니다, 그래서이, 사소한 문제가

name = JSON.stringify($('#name').val()); 

그러나 문제는 또 다른 JSON.stringify 내가 $은 ('# 이름'). 발은() 값이 아니라고 생각하기 때문에 그래서 난 정말 당신이 쓴 undertand에없는 문자열로 OBJECT 변환입니다 객체. 그래서이 문제를 해결하지만 JSON 객체가 아닌 JSON 문자열 화를하는 이유 만 알면 다른 문제가 있습니다. PHP에서 사용하는 sanitize 함수는 개인 함수입니까? 그렇지 않으면 오류가 발생합니다. ... 그런 식으로 작성된 Ajax 객체 내부에서 false를 반환합니다. 무엇을 의미합니까? 반환 false로 무엇을 의미합니까? 코드를이 방법으로 다시 작성해야하지만 실제로 이해하지 못하는 JSON.stringify 문제는 간단합니다. 또 다른 문제는 file.php에서 mail2 함수를 전환하는 방법입니다.이 질문은 다른 것이지만 잘하고 있다고 가정합니다. Btw this work.

Ps :하지만 JSON이 왜 문자열 화합니까?;)

HTML

<label for="name">Nome</label> 
    <input type="text" id="name" value="" name="name"><br> 
    <label for="email">Email</label> 
    <input type="text" id="email" value="" name="email"> 
    <div class="form-group"> 
     <div class="Descrizione">   
      <label for="InserisciDescrizione" class=""><b>Descrizione : </b></label> 
      <textarea id='message' placeholder="Inserisci Descrizione" 
         name='message' rows='5' cols='60' value="" 
         title="Descrizione"></textarea> 
     </div> 
    </div> 
    <button type="button" id="btnEmail" onclick="jq1()">Submit</button> 

JS

function jq1() { 
      doAjax(); 
    } 
    function doAjax(){ 
     var name, email, message; 
     name = JSON.stringify($('#name').val()); 
     email = JSON.stringify($('#email').val()); 
     message = JSON.stringify($('#message').val()); 
     ajax = phpcall(name, email, message); 
    }  
    function phpcall (name, email, message){ 
     return $.ajax({ 
      url: 'file.php', 
      type: 'POST', 
      data: { email: email, name: name, message: message } 
     }); 
    } 

PHP

 function mail2() { 
      if (isset($_POST['name'])){ 
       $name = json_decode($_POST['name']); 
       } 

      if (isset($_POST['email'])){ 
       $email = json_decode($_POST['email']); 
      } 
      if (isset($_POST['message'])){ 
       $message= json_decode($_POST['message']); 
     } 

      $to = "[email protected]"; 
      $subject = "Service Inquiry"; 
      $txt = $message . $email; 
      $headers = "From: [email protected]"; 
      //print '1' .$name .'2' .$email .$message;exit; 
      mail($to,$subject,$txt,$headers); 
      } 
+0

구문 오류를 수정했으며 여전히 동일한 문제가 발생합니다. 초기 JavaScript 함수 호출에 일부 로깅을 추가했으며 작성하려고하는 로그 파일이 채워지지 않습니다. –

+0

복사 후 jquery 3.2를 다운로드하고 코드를 붙여 넣는 것이 좋습니다 ... jquery 3을 포함시킨 후 PHP에서 라인을 주석 처리하고 라인을 분해하고 크롬이나 파이어 폭스의 콘솔 브라우저 (F12)에서 볼 수 있습니다. 네트워크에서 매개 변수가 올바른지 .. 내 코드를 시도했지만 전자 메일이 스팸 폴더에 도착했지만 스팸 폴더에 들어 가지 않는 유효한 코드를 수행하면 개인으로 보낼 수 있습니다. 안녕히 계십시오. – Spizzi

0

이메일이되지 않는, 나는 구문 오류를 수정하지 않고 페이지가 다시로드 더 이상이지만, 보냈습니다.

다음과 같이 초기 JavaScript 호출에 일부 로깅을 추가했습니다.

  function jq1() { 

      var txtFile = "/tmp/test.txt"; 
      var file = new File(txtFile); 

      file.open("w"); // open file with write access 
      file.writeln("First line of text"); 
      file.close(); 

      doAjax(); 

      } 

텍스트 파일에 아무 것도 없습니다. 아무것도 쓰여지고 있지 않습니다.

그런 다음 JQuery와 AJAX 함수를 라이브러리에서 HTML로 옮겼다.

 <script language="javascript"> 
      function jq1() { 

      var txtFile = "/tmp/test.txt"; 
      var file = new File(txtFile); 

      file.open("w"); // open file with write access 
      file.writeln("First line of text"); 
      file.close(); 

      doAjax(); 

      } 

      function phpcall (name, email, message) 

      { 

         return $.ajax({ 

           url: 'file.php', 
           type: 'POST', 
           data: { email: email, name: name, message: message } 


         }); 

      } 


      function doAjax() 

        { 

       var name, email, message; 
         name = JSON.stringify($('#name').val()); 
         email = JSON.stringify($('#email').val()); 
         message = JSON.stringify($('@message').val()); 

       ajax = phpcall(name, email, message); 

        } 

</script> 

이것은 여전히 ​​같은 결과를 낳았습니다. 버튼을 클릭해도 아무 일도 일어나지 않습니다.

스크립트에 포함 된 언어는 무엇입니까? 나는 단지 다음을 선언하고있다.

 <script src="assets/js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script> 
     <script language="javascript" src="assets/js/main.js"></script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 

내가 함수라고 부르는 선언이나 버튼 태그에는 근본적으로 잘못된 것이 있습니다. 나는 그것을 아래에 포함시켰다.

 <button type="button" id="btnEmail" 
         onclick="jq1()" class="btn btn-primary">Submit</button> 

나에게는 충분히 간단 해 보입니다.

미안하지만 테스트를하는 데 미안합니다. 우리는 웹 스크립트가 크게 작동합니다. 어떤 제안?

관련 문제