2013-10-16 33 views
0

我在PHP,Jquery和Ajax上創建了一個代碼庫,這是一個更改選項下拉列表。這個程序有三個部分。在Wordpress AJAX調用PHP文件,從數據庫獲取數據並返回索引文件

第一部分 該文件的第一部分是具有3輸入字段,這些字段被從數據庫中獲取數據選項和改變選項中的下一個輸入字段中的值進行過濾的形式。

<?php /** * Plugin Name: My Car Plugin */ 
    add_action(the_content, my_car_plugin);  ?> 

<?php 
    function register_script() { 

     wp_enqueue_script('my_car_script', 'http://www.thenewsol.com/zaman/my_car_script.js', 'jQuery', '1.5.2'); 
     } 
    function print_script() { 
     wp_print_scripts('my_car_script'); 
     } 
?> 


<?php 
    function my_car_plugin() { 
      register_script(); 
       print_script(); 
    ?> 
     <div style="width:800px; margin:auto;padding-top:100px;"> 
      <form> 
       <select id="Make" onchange="load_options(this.value,'Model');"> 
        <option value="">- Select Make -</option> 
         </select> 
     &nbsp;&nbsp;&nbsp; 

         <select id="Model" onchange="load_options(this.value,'Year');"> 
        <option value="">- Select Model -</option> 
       </select> 
     &nbsp;&nbsp;&nbsp; 

      <select id="Year"> 
       <option value="">- Select Year -</option> 
        </select> 
         <img src="loader.gif" id="loading" align="absmiddle" style="display:none;"/> 
    <?php 
          } 
     ?> 

第二部分 這部分是調用程序通過Ajax調用第三部分jQuery的功能。

jQuery(document).ready(function(){ 
load_options('','Make'); 
}); 

function load_options(id,index){ 
jQuery("#loading").show(); 
    if(index=="Model"){ 
     jQuery("#Year").html('<option value="">- Select Year -</option>'); 
    } 
    jQuery.ajax({ 
     url: "ajax.php?index="+index+"&id="+id, 
      complete: function(){$("#loading").hide();}, 
       success: function(data) { 
      jQuery("#"+index).html(data); 
     } 
    }) 
} 

三PARAT 第三和計劃的最後一部分是與數據庫交互和對Ajax調用程序的第一部分提供數據的文件。

<?php 

class AJAX { 


    public $_index = NULL; 



    public function __construct(){ 

     $this->process_data(); 
    } 


private function process_data(){ 

global $wpdb; // Wordpress Global Database Variable access 

    $this->_index = ($_REQUEST['index'])?$_REQUEST['index']:NULL; 
     $id = ($_REQUEST['id'])?$_REQUEST['id']:NULL; 
switch($this->_index){ 

    case 'Make': 
     $results = $wpdb->get_results("SELECT * FROM wp_countries"); 
     echo "<select>"; 
     foreach($results as $rows){ 

     echo "<option value=\"$rows->id\">".$rows->country_name."</option>"; 
     } 
     echo "</select>"; 
     break; 

    case 'Model': 
     $results = $wpdb->get_results("SELECT * FROM wp_states WHERE country_id=$id"); 
     echo "<select>"; 
     foreach($results as $rows){ 

     echo "<option value=\"$rows->id\">$rows->state_name</option>"; 
     } 
     echo "</select>"; 
     break; 

    case 'Year': 
     $results = $wpdb->get_results("SELECT * FROM wp_cities WHERE state_id=$id"); 
     echo "<select>"; 
     foreach($results as $rows){ 

     echo "<option value=\"$rows->id\">$rows->city_name</option>"; 
     } 
     echo "</select>"; 
     break; 

    default: 
     break; 

} 

    } 


} 

$obj = new AJAX(); 

?> 

要求 我想這個節目在WordPress的插件的形式轉化。我無法弄清楚代碼中的實際問題在哪裏。爲什麼它不起作用? 如果我刪除wordpress格式並在本地主機上運行它的工作完美。但是,當我嘗試在wordpress中嵌入它不起作用。

請指導/幫助解決此問題。


感謝您的指導。其實,我不擅長使用AJAX。請詳細說明如何在Wordpress中更改我的jQuery/Ajax功能。我的功能是本

jQuery.ajax({ url: "ajax.php?index="+index+"&id="+id, 
     complete: function(){$("#loading").hide();}, 
     success: function(data) { 
    jQuery("#"+index).html(data); } }) 

你的代碼是這樣一個

jQuery.post(
ajax_object.ajax_url, 
    data, function(response) { 
    alert('Got this from the server: ' + response); }); 

請轉換/更改該格式

+0

添加一些代碼檢查選項,看看哪些文件運行,直到他們運行的地方...是第一個jqury加載throwe wp_enqueue_script? –

+0

你正在做的插件和Ajax *非常* **非常錯誤**。解決這個問題是不可能的。在這裏和在[wordpress.se]研究工作示例並重建你的事情。 – brasofilo

+0

屬於http://wordpress.stackexchange.com/ – Anthon

回答

0

你爲什麼不使用ADD_ACTION( 'wp_ajax_my_action' 我的代碼, 'my_action_callback');

add_action('wp_ajax_my_action', 'my_action_callback'); 
function my_action_callback() { 
    global $wpdb; // this is how you get access to the database 

    $whatever = intval($_POST['whatever']); 

    $whatever += 10; 

     echo $whatever; 

    die(); // this is required to return a proper result 
} 

jQuery(document).ready(function($) { 
    var data = { 
     action: 'my_action', 
     whatever: ajax_object.we_value  // We pass php values differently! 
    }; 
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations 
    jQuery.post(ajax_object.ajax_url, data, function(response) { 
     alert('Got this from the server: ' + response); 
    }); 
}); 

參見http://codex.wordpress.org/AJAX_in_Plugins