2015-07-03 127 views
0

我目前正試圖檢查一個HTML表單,如果用戶給出的電子郵件已經在數據庫中。所以如果get_user_by函數工作,我的PHP文件必須返回true。爲什麼Wordpress AJAX請求返回整個HTML頁面而不是json結果?

我按照所有WordPress的指引AJAX請求,並測試了這兩種方法,AJAX(jQuery和香草JS)。

jQuery的方法錯誤回調結束(對應於整個當前HTML頁面xhr.responseText),而香草JS方法在成功回調逐漸復甦,但始終返回0

首先,我註冊了我的ajax js文件並將其本地化以具有良好的admin-ajax.php網址。然後我得到我的自定義AJAX掛鉤:wp_ajax_nopriv_get_user_by_email其中,get_user_by_email是請求的操作數據。

<?php 
/* Security access : Hacker can't access php files here */ 
defined('ABSPATH') or die('No script kiddies please!'); 

add_action('init', 'my_script_enqueuer'); 
function my_script_enqueuer() { 
    wp_register_script("ajax_user_call", MY_PLUGIN_URL.'js/ajax_user_call.js', array('jquery')); 
    wp_localize_script('ajax_user_call', 'myAjax', array('ajaxurl' => admin_url('admin-ajax.php')));   

    wp_enqueue_script('jquery'); 
    wp_enqueue_script('ajax_user_call'); 
} 

if (is_admin()) { 
    add_action('wp_ajax_nopriv_get_user_by_email', 'my_plugin_ajax_get_user_by_email'); 

    function my_plugin_ajax_get_user_by_email() { 
     my_plugin_log_me("Is there somebody ?"); 
     // get the mail parameter from URL 
     $mail = $_REQUEST["mail"]; 
     if (isset($_REQUEST["mail"]) && !empty($_REQUEST["mail"])) { 
      $user = get_user_by('email', $_REQUEST["mail"]); 
      if ($user == false) { 
       echo -2; 
       wp_die(); 
      } 
      else { 
       $response['first_name'] = $user->first_name; 
       $response['last_name'] = $user->last_name; 

       wp_send_json($response); 
      } 
     } 
     else { 
      echo -3; 
      wp_die(); 
     } 
    } 

} ?> 

現在我把ajax_user_call.js:

jQuery(document).ready(function() { 
    jQuery("#identificationEmailInput").blur(function() { 
    jQuery.ajax({ 
     type: "post", 
     dataType: "json", 
     cache: false, 
     url: myAjax.ajaxurl, 
     data: { action: "get_user_by_email", mail: this.value }, 
     success: function(response, statut) { 
      if(response == 0) { 
      console.log("Veuillez rentrer une adresse mail du Club Savignac"); 
      } 
      else { 
      user = response; 
      console.log("USER : " + user); 
      } 
     }, 
     error: function(xhr, textStatus, errorThrown) { 
      console.log("AJAX Request failed"); 
      console.log(textStatus); 
      console.log(errorThrown); 
      console.log(xhr.responseText); 
     } 
    }); 
    }); 
}) 

jQuery的( 「#identificationEmailInput」)值返回一個良好的電子郵件字符串。 url參數myAjax.ajaxurl返回好路徑:「http://mysite.fr/wp-admin/admin-ajax.php」。

我也試圖硬編碼像這樣的參數:

jQuery.post(
    "../wp-admin/admin-ajax.php", 
    { 
    action: 'get_user_by_email', 
    mail: '[email protected]' 
    }, 
    function(response) { 
    console.log(response); 
    } 
); 

然後,我也試圖與香草JS喜歡它:

var getJSON = function(url, param1, param2, successHandler, errorHandler) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('post', url, true); 
    var params = "action=" + param1 + "&mail=" + param2; 
    console.log(params); 
    xhr.responseType = 'json'; 

    xhr.onload = function() { 
     var status = xhr.status; 
     if (status == 200) { 
     successHandler && successHandler(xhr.response); 
     } else { 
     errorHandler && errorHandler(status); 
     } 
    }; 
    xhr.send(params); 
    }; 

    jQuery(document).ready(function() { 
    jQuery("#identificationEmailInput").blur(function() { 

     getJSON(myAjax.ajaxurl, 'get_user_by_email', jQuery("#identificationEmailInput").val(), function(data) { 
      console.log('user object: ' + data); 
     }, function(status) { 
      console.log('Something went wrong.'); 
     }); 
    }); 
    }) 

但數據值始終返回0

任何人都有關於這個棘手問題的想法?最令人驚訝的是,它在兩天前就開始工作了,現在它已經不復存在了,而我沒有做任何改變。

+0

是否有任何控制檯錯誤? – sarath

回答

0

添加此插件php文件並檢查它。

add_action('wp_ajax_nopriv_get_user_by_email', 'get_user_by_email'); 
    add_action('wp_ajax_get_user_by_email', 'get_user_by_email'); 

    function get_user_by_email(){ 

    $user_email = $_POST['email']; 
    //do some thing with the email 

    die(); 
    } 
+0

你好,謝謝你的回答,不幸的是,它不會改變任何東西。 – FloFlo91

相關問題