2015-10-23 74 views
5

我在Wordpress插件中遇到wp_remote_get問題。在wordpress插件中使用wp_remote_get時Ajax調用失敗

我想要做的是調用我的主要公共類中的方法與Ajax。但問題是,當使用wp_remote_get函數時,呼叫失敗。它應該做一個API調用並將數據返回給jQuery。當我註釋掉wp_remote_get時,該通話正常工作,並且回覆回覆。任何想法我怎麼能做這項工作?

方法處理呼叫:

public function countryLookupApiCall() { 
    if (isset($_POST['action']) && isset($_POST['country'])) { 
     $country = $_POST['country']; 
     $apiKey = $this->getApiKey(); 
     $url = $this->url . $country . '/callCharges?apiKey=' . $apiKey . '&response=JSON'; 
     $response = wp_remote_get($url); 
     echo $response; 
     die(); 
     } 
    } 

的jQuery:

jQuery(document).ready(function() { 
jQuery("#countryLookupForm").submit(function(e){ 
    var country = jQuery("#selectCountry").val(); 
    var action = 'countryLookupResponse'; 

    jQuery.ajax ({ 
     type: 'POST', 
     url: countryLookup.ajaxurl, 
     dataType: 'json', 
     data: {action: action, country: country}, 

     success: function(data) { 
      //do something with this data later on 
      var result = jQuery.parseJSON(data); 
      } 
     }); 
    }); 
}); 

WordPress的動作都註冊好,因爲通話的作品時,我不使用wp_remote_get

編輯: 解決方案不僅僅簡單,我只需要添加e.preventDefault();

回答

1

您需要在代碼中添加錯誤檢查。這可以幫助您找出造成問題的原因。

public function countryLookupApiCall() { 
if (isset($_POST['action']) && isset($_POST['country'])) { 
    $country = $_POST['country']; 
    $apiKey = $this->getApiKey(); 
    $url = $this->url . $country . '/callCharges?apiKey=' . $apiKey . '&response=JSON'; 
    $response = wp_remote_get($url); 
    if (is_wp_error($response)) { 
     $error_code = $response->get_error_code(); 
     $error_message = $response->get_error_message(); 
     $error_data = $response->get_error_data($error_code); 
     // Process the error here.... 
    } 
    echo $response; 
    die(); 
    } 
} 

你也正在使用wp_remote_get結果呼應。如文檔中定義的,wp_remote_get returs WP_Error或數組實例。所以,你應該用這樣的:

echo $response['body']; 
+0

的問題是,AJAX調用失敗完全如果包括wp_remote_get,只要我刪除電話的工作就好了。我認爲這可能是某種衝突。 – Danijelb

+0

呃...比你需要在你的PHP配置中啓用錯誤報告並設置錯誤報告級別來調試。這會讓你確切的錯誤進一步移動。 'error_reporting(E_ALL); ini_set(「display_errors」,1);' – alexeevdv