2015-10-29 211 views
3

我需要一些幫助。我設計了我的自定義ajax函數。這是一個簡單的形式,輸入5個值驗證它們,然後通過ajax將數據發送到php函數,然後函數通過電子郵件發送這些詳細信息。一旦成功,彈出窗口顯示給用戶確認。ajax成功返回0

我已經應用驗證,我也能夠運行ajax。但由於某種原因,我的成功函數不斷返回0.請幫助。 http://imgur.com/m5Ah0md

網絡輸出上提交關於鉻: http://imgur.com/R7q9WnH

我的JavaScript

function contact_validations(){ 
event.preventDefault(); 
var name= jQuery('#contactname').val(); 
var cemail= jQuery('#contactemail').val(); 
var tel= jQuery('#contactphone').val(); 
var address= jQuery('#contactaddress').val(); 
var message= jQuery('#contactsubject').val(); 
var s=true; 

if(name==''|| name==null){ 
    jQuery('#name_err').html('Please enter your name'); 
    s=false; 
    }else{ 
     jQuery('#name_err').html(''); 
     } 

if(cemail==''){ 
    jQuery('#email_err').html('Please enter email'); 
    s=false; 
    }else{ 
     var x=cemail; 
     var atpos=x.indexOf("@"); 
     var dotpos=x.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
      { jQuery('#email_err').html("Please Enter Valid E-mail Address"); s= false;} 
      else{ 
       jQuery('#email_err').html(''); 
       } 
     } 


if(tel==''|| tel==null){ 
    jQuery('#tel_err').html('Please enter your telephone number'); 
    s=false; 
    }else{ 
     jQuery('#tel_err').html(''); 
     } 



if(address=='' || address==null){ 
    jQuery('#address_err').html('Please enter your address'); 
    s=false; 
    }else{ 
     jQuery('#address_err').html(''); 
     } 


if(message=='' || message==null){ 
    jQuery('#message_err').html('Please enter your message'); 
    s=false; 
    }else{ 
     jQuery('#message_err').html(''); 
     } 
     console.log(url); 


if(s) 
     { 
      var url = "http://localhost:9080/c/wp-admin/admin-ajax.php"; 
      var data = { 

       "action":"contact_email" , 
       "name": name , 
       "email": cemail , 
       "tel": tel , 
       "address": address , 
       "message": message 


      } 
      jQuery.ajax({ 
      type: "POST", 
      url: url, 
      contentType: 'JSON', 
      data: JSON.stringify(data), 
      beforeSend: function(){ 
       console.log('happened'); 
       jQuery('#ajax-loader').show(); 
       jQuery('#ajax-loader').html('<img src="http://localhost:9080/c/wp-content/themes/aussie/images/ajax-loader.gif">'); 
       }, 
      success: function(result) { 
       jQuery('#ajax-loader').hide(); 
       console.log(result); 


       if(result=='0') 
       { 
        console.log("No Result") 
       } 
       if(result=='1') 
       { 
       jQuery.fancybox({ 
        href: '#contact-popup' 
       }); 
       jQuery('#contactname').val(''); 
       jQuery('#contactemail').val(''); 
       jQuery('#contactphone').val(''); 
       jQuery('#contactaddress').val(''); 
       jQuery('#contactsubject').val(''); 

       console.log (s); 
       } 
      } 
     }); 


     } 
} 

我的javascript:上提交鉻

開發工具輸出

function contact_email() { 



      $url = get_bloginfo('url'); 
      $storeemail = get_option('contactemailstored'); 
      $to = $storeemail['contactemail']; 
      $subject = $url . ' - Contact'; 
      $name = $_POST['contactname']; 
      $email = $_POST['contactemail']; 
      $phone = $_POST['contactphone']; 
      $address= $_POST['contactaddress']; 
      $content= $_POST['contactsubject'];           
      $message = '<br>'.'Name:- ' . $name . '<br>'; 
      $message .= 'Email- ' . $email . '<br>'; 
      $message .= 'Phone:- ' . $phone . '<br>'; 
      $message .= 'Address :' . $address . '<br>'; 
      $message .= 'Subject :' . $content . '<br>'; 


      $sent_message = wp_mail($to , $subject, $message); 

     if ($sent_message) { 
      // the message was sent... 
      echo '1'; 
     } else { 
      // the message was not sent... 
      echo '1'; 
     } 

     exit; 


    } 
add_action('wp_ajax_contact_email', 'contact_email'); 

add_action('wp_ajax_nopriv_contact_email', 'contact_email'); 
+1

究竟返回0的是什麼? –

+0

當你在瀏覽器中加載php頁面時會發生什麼? – Fluinc

+0

但是你的'成功'方法並沒有返回任何東西......你的意思是'result =='0''? – rnevius

回答

0

謝謝非常感謝大家的幫助。我得到了很多幫助。雖然我發現了這個問題。問題是,對於WordPress我不需要在JSON中解析數據。所以我用正常的類型,它的工作。

此外,我對我的功能CONTACT_EMAIL語法錯誤。我用

$name = $_POST['contactname']; 
$email = $_POST['contactemail']; 
$phone = $_POST['contactphone']; 
$address= $_POST['contactaddress']; 
$content= $_POST['contactsubject']; 

我捕捉表單數據與它的原始而是應該由已在AJAX被宣佈爲VAL被捕獲。相反,我用這個和它的工作:

$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['tel']; 
$address= $_POST['address']; 
$content= $_POST['message']; 

下面是更新後的代碼:

的Jquery:

function contact_validations(){ 
var name= jQuery('#contactname').val(); 
var cemail= jQuery('#contactemail').val(); 
var tel= jQuery('#contactphone').val(); 
var address= jQuery('#contactaddress').val(); 
var message= jQuery('#contactsubject').val(); 
var s=true; 

if(name==''|| name==null){ 
    jQuery('#name_err').html('Please enter your name'); 
    s=false; 
    }else{ 
     jQuery('#name_err').html(''); 
     } 

if(cemail==''){ 
    jQuery('#email_err').html('Please enter email'); 
    s=false; 
    }else{ 
     var x=cemail; 
     var atpos=x.indexOf("@"); 
     var dotpos=x.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
      { jQuery('#email_err').html("Please Enter Valid E-mail Address"); s= false;} 
      else{ 
       jQuery('#email_err').html(''); 
       } 
     } 


if(tel==''|| tel==null){ 
    jQuery('#tel_err').html('Please enter your telephone number'); 
    s=false; 
    }else{ 
     jQuery('#tel_err').html(''); 
     } 



if(address=='' || address==null){ 
    jQuery('#address_err').html('Please enter your address'); 
    s=false; 
    }else{ 
     jQuery('#address_err').html(''); 
     } 


if(message=='' || message==null){ 
    jQuery('#message_err').html('Please enter your message'); 
    s=false; 
    }else{ 
     jQuery('#message_err').html(''); 
     } 


if(s) 
     { 
      var url = "http://localhost:9080/c/wp-admin/admin-ajax.php"; 

      jQuery.ajax({ 
      type: "POST", 
      url: url, 


      data:"action=contact_email&name="+name+"&email="+cemail+"&tel="+tel+"&address="+address+"&message="+message, 
      beforeSend: function(){ 
       console.log('happened'); 
       jQuery('#ajax-loader').show(); 
       jQuery('#ajax-loader').html('<img src="http://localhost:9080/c/wp-content/themes/aussie/images/ajax-loader.gif">'); 
       }, 
      success: function(result) { 
       jQuery('#ajax-loader').hide(); 
       console.log(result); 


       if(result=='0') 
       { 
        console.log("No Result") 
       } 
       if(result=='1') 
       { 
       jQuery.fancybox({ 
        href: '#contact-popup' 
       }); 
       jQuery('#contactname').val(''); 
       jQuery('#contactemail').val(''); 
       jQuery('#contactphone').val(''); 
       jQuery('#contactaddress').val(''); 
       jQuery('#contactsubject').val(''); 

       console.log (s); 
       } 
      } 
     }); 


     } 

} 

PHP

function contact_email() { 



      $url = get_bloginfo('url'); 
      $storeemail = get_option('contactemailstored'); 
      $to = $storeemail['contactemail']; 
      $subject = $url . ' - Contact'; 
      $name = $_POST['name']; 
      $email = $_POST['email']; 
      $phone = $_POST['tel']; 
      $address= $_POST['address']; 
      $content= $_POST['message'];            
      $message = '<br>'.'Name:- ' . $name . '<br>'; 
      $message .= 'Email- ' . $email . '<br>'; 
      $message .= 'Phone:- ' . $phone . '<br>'; 
      $message .= 'Address :' . $address . '<br>'; 
      $message .= 'Subject :' . $content . '<br>'; 


      $sent_message = wp_mail($to , $subject, $message); 

     if ($sent_message) { 
      // the message was sent... 
      echo '1'; 
     } else { 
      // the message was not sent... 
      echo '0'; 
     } 

     exit; 


    } 
add_action('wp_ajax_contact_email', 'contact_email'); 

add_action('wp_ajax_nopriv_contact_email', 'contact_email'); 
1

問題是您正在將data轉換爲json,但wp期望找到一個名爲action的字段來查找正確的函數,因此您的返回值爲0(函數未找到,未遇到出口,因此返回0)。

在這種情況下,你實際上並不需要json值發送表單,但它會期望一個json響應,所以在你的php函數中你應該得到json_encode你的返回值。

jQuery(document).ready(function(){ 

     var url = "<?php echo admin_url('admin-ajax.php'); ?>"; 
     var data = { 

      "action": contact_email , 
      "name": name , 
      "email": cemail , 
      "tel": tel , 
      "address": address , 
      "message": message 
     } 

     jQuery.ajax({ 
      type: "POST", 
      url: url, 
      contentType: 'JSON', 
      //JSON.stringify(data), -->will cause issue 
      data: data, 
      beforeSend: function(){ 
       console.log('happened'); 
      }, 
      success: function(result) { 
       console.log(result); 
      } 
     });   
}); 

PHP

function contact_email() { 

      // the message was sent... 
     echo json_encode(1); // if just sending 1, you can echo without json encode... 
     exit; 

} 
add_action('wp_ajax_contact_email', 'contact_email'); 

add_action('wp_ajax_nopriv_contact_email', 'contact_email'); 

發送的Json ...

如果你願意,你可以轉換其他形式的價值觀JSON和包括在它自己的對象鍵。例如

var data={}; 
data.action= 'hook'; 
data= JSON.stringify(formData); 

依此類推。

+0

謝謝你的解答隊友。我試過你的方式確切的代碼沒有工作,但我明白了.. –

0
function contact_email() { 

     //your code 
     exit(); 
     die(); 
} 

您需要在函數的末尾包含這些PHP函數exit();die();