2015-11-20 47 views
0

我有一個接觸的形式PHP + jQuery的+ HTML.the形式DIV是隱藏在index.html的,直到接觸按鈕presses.Jquery作品,Ajax調用崗位所需的數據到PHP,這相呼應response.The問題是,當PHP相呼應,而不是保持同一頁面上無刷新,瀏覽器重定向到contact.php,其中回聲顯示correctly.I認爲阿賈克斯贏得部分儘管語法在所有教程中都是一樣的,但是不會捕獲服務器的響應。請幫助。 HTML部分:jQuery的AJAX接觸形式重定向到contact.php,而不是捕捉的php回聲和執行sucess功能

HTML

<div id = 'contact_form'> 
    <div id = 'result'></div> 
     <form id="contactform" action="js/contact.php" method="POST" enctype="multipart/form-data"> 
      <div class="row"> 
       <input id="name" class="input" name="name" type="text" required = 'true' value="" size="30" placeholder='Nome'/> 
      </div> 

      <div class="row"> 
       <input id="email" class="input" name="email" type="text" required = 'true' value="" size="30" placeholder = 'Email'/> 
      </div> 

      <div class="row"> 
       <textarea id="message" class="input" name="message" rows="7" cols="50" required = 'true' placeholder = 'Messagio'></textarea> 
      </div> 

      <input id="submit_button" class = 'myButton' type="submit" value="Manda messagio" /> 
     </form> 
    </div>      
</div> 

JS

$('#submit_btn').click(function(){ 
    var user_name = $("input#name").val(); 

    if (user_name == "") { 
     $("input#name").focus().addClass('active'); 
     return false; 
    } 

    var user_email = $("input#email").val(); 

    if (!$("input#email").val().match(/^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/)) { 
      $("input#email").focus().addClass('active'); 
      return false; 
    } 

    var msg = $("textarea#message").val(); 

    if (message == "") { 
     $("textarea#message").focus().addClass('active'); 
     return false; 
    } 

    var dataString = 'name='+ user_name + '&email=' + user_email +'message = ' + msg; 
    //alert (dataString);return false; 


    // Send the request 
    $.ajax({ 
     type: "POST", 
     url: "contact.php", 
     data: dataString, 
     success: function(d) { 
      console.log(d); 
     } 
    }); 

    return false; 
}); 

PHP

<?php 
    $toEmail = "[email protected]"; 
    $subject = "dal tuo sito "; 
    $mailHeaders = "From: " . $_POST["name"] . "<". $_POST["email"] .">\r\n"; 

    if(mail($toEmail,$subject,$_POST["message"], $mailHeaders)) { 
     echo "Mail Sent"; 
    } else { 
     echo "Problem in Sending Mail"; 
    } 
?> 
+0

使用當你的形式包括任何'''元素多部分/形式data'。 –

+0

你確定JS/contact.php是正確的? 「js/...」似乎是錯誤的。反正刪除「行動=‘JS/contact.php’方法=‘POST’」的一部分,則要麼修改類型「提交」到「按鈕」或放e.preventDefault並且如答案建議返回0到提交處理程序下面。 –

回答

0

因爲你使用提交類型輸入,我建議你改變按鈕的鏈接提交輸入。如果你想保持相同的按鈕,你可以改變你的js

HTML

<a href="javascript:;" id="btn">Send</a> 

JS

<script> 
    $('#btn').on("click", function(){ 
     //Your ajax here 
     //var dataString = 'name='+ user_name + '&email=' + user_email +'message = ' + msg; 
     //alert (dataString);return false; 
     // Send the request 
     $.ajax({ 
      type: "POST", 
      url: "contact.php", 
      data: {name: user_name, email: user_email, message: msg} 
     }).done(function(response){ 
      console.log(response); 
     }); 
    }); 
</script> 
+0

謝謝,這樣做,現在鉻控制檯拋出一個'相同的來源JavaScript錯誤',從而防止js捕捉php的回聲,並進一步執行。郵件也不會被髮送也。我現在有點困惑。好像如果有沒有在窗體上的行動,PHP永遠不會被調用。 – user3402472

+0

是的,經過今天的廣泛測試,沒有用的執行ajax調用我的host.tryed設置標題在php-> nothing(allow-origin-accept *)或類似的東西,nothing.try的JavaScript上相同頁面,從而避免了相同的原產地政策,無濟於事。我不知道該怎麼做。 tryed一個PHP通過重定向頭('位置..//index.html')after郵件succeded,但不起作用either.I我在這個point.all教程失去了有類似的代碼,它似乎工作 – user3402472

+0

你好,我編輯代碼,現在嘗試。 – Netzach

0

:而且還從表單中刪除action ATTR。

$('#submit_btn').click(function(e){ 
 
    e.preventDefault(); 
 
//YOUR CODE HERE 
 
}