2016-05-27 2 views
0

Ich versuche, Datensätze aus einer Select-Abfrage innerhalb eines Plugins abrufen, aber keine Datensätze zurückgegeben werden, und ich die folgende Fehlermeldung (Webkonsole). Meine Frage ist, was ich hier mit Blick ?:[Wordpress + PHP + MySQL] Datenbank SELECT-Abfrage innerhalb Plugin gibt kein Ergebnis

Object { readyState: 4, getResponseHeader: .ajax/w.getResponseHeader(), getAllResponseHeaders: .ajax/w.getAllResponseHeaders(), setRequestHeader: .ajax/w.setRequestHeader(), overrideMimeType: .ajax/w.overrideMimeType(), statusCode: .ajax/w.statusCode(), abort: .ajax/w.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 12 more… } getregions.js:47:17 
 
error getregions.js:48:17 
 
Internal Server Error getregions.js:49:17

Mein PHP-Code lautet wie folgt:

function getregions_scripts() { 
 
    wp_enqueue_script(
 
    'getregions-script', 
 
    plugin_dir_url(__FILE__) . "assets/getregions.js", 
 
    array('jquery'), 
 
    '1.0', 
 
    true 
 
); 
 

 
    wp_localize_script(
 
    'getregions-script', // this needs to match the name of our enqueued script 
 
    'gymRegions',  // the name of the object 
 
    array('ajaxurl' => admin_url('admin-ajax.php')) // the property/value 
 
); 
 
} 
 
add_action('wp_enqueue_scripts', 'getregions_scripts'); 
 

 
add_action('wp_ajax_showcountries', 'showcountries_callback'); 
 
add_action('wp_ajax_no_priv_showcountries', 'showcountries_callback');

function showcountries_callback() { 
 

 
    $mydb = new wpdb('user','password','db','localhost'); 
 
    $mydb->show_errors(); 
 

 
    $makeselection=$_POST["makeselection"]; 
 

 
    if($makeselection=="getCountryList"){ 
 
      //$showcountry = pdo_query("Select distinct wp_usermeta.meta_value, COUNTRY_MAPPING.COUNTRY_NAME from wp_usermeta, COUNTRY_MAPPING where wp_usermeta.meta_key = 'country_registration' and wp_usermeta.meta_value = COUNTRY_MAPPING.COUNTRY_CODE"); 
 
    $table_name = $wpdb->prefix . "usermeta"; 
 
    $sql = $wpdb->prepare("Select distinct meta_value, COUNTRY_MAPPING.COUNTRY_NAME 
 
           from {$table_name}, COUNTRY_MAPPING 
 
           where meta_key = 'country_registration' 
 
           and meta_value = COUNTRY_MAPPING.COUNTRY_CODE"); 
 
    $showcountry = $wpdb->get_results($sql, ARRAY_A); 
 

 
    if (!$showcountry) { 
 
     //$message = 'Invalid query: ' . pdo_error() . "\n"; 
 
     //$message .= 'Whole query: ' . $showcountry; 
 
     //die($message); 
 
    }else{ 
 
     $html = "<option value=''>Select Country</option>"; 
 
     foreach($showcountry as $row){ 
 
      $html .= "<option value='{$row->meta_value}'>{$row->COUNTRY_NAME}</option>"; 
 
     } 
 
     echo json_encode($html, JSON_PRETTY_PRINT); 
 
    } 
 
    } 
 
    wp_die(); 
 
}

Meine Javascript (getregions.js) Datei lautet wie folgt:

function feedData($) { 
 
    jQuery(document).ready(function ($) { 
 
     var serialized = $('#MyForm').serialize(); 
 
     $.ajax({ 
 
      cache: false, 
 
      type: "POST", 
 
      async: false, 
 
      url: gymRegions.ajaxurl, 
 
      data:{action: "showcountries", makeselection: "getCountryList", serialized}, 
 
      dataType: "json", 
 
      success: function (data, status, error) { 
 
       $('#CountryList').append(data); 
 
      }, 
 
      error: function (data, status, error) { 
 
       console.log(data); 
 
       console.log(status); 
 
       console.log(error); 
 
      } 
 
     }); 
 
    }); 
 
}

Datei liest Meine .htaccess wie:

# BEGIN WordPress 
 
<IfModule mod_rewrite.c> 
 
RewriteEngine On 
 
RewriteBase/
 
RewriteRule ^index\.php$ - [L] 
 
RewriteCond %{REQUEST_FILENAME} !-f 
 
RewriteCond %{REQUEST_FILENAME} !-d 
 
RewriteRule . /index.php [L] 
 
</IfModule> 
 

 
# END WordPress

Vielen Dank im Voraus.

+0

erste Fehler, den man nicht json zurückkehren, Ihre Funktion html Spitze zurückkehrt: Sie don 't eine andere Verbindung db, einfache Bedienung„g erstellen müssen lobal $ wpdb " –

+0

Erledigt, als würde man nur' global $ wpdb' referenzieren. Aber immer noch bleiben meine ursprünglichen Probleme. Irgendwelche weiteren Vorschläge? – TheoG

+0

ändern Sie Ihr Javascript dataType: "html", weil Ihr PHP-Code HTML und in PHP-Code anstelle von echo json_encode wirft ($ html, JSON_PRETTY_PRINT); nur schreiben echo $ html; –

Antwort

0

Versuchen Sie die Einstellung dataType auf "html" und entfernen Sie Ihren Anruf an json_encode - einfach Echo der HTML-Ausgabe. Es scheint nicht so, als ob Sie tatsächlich JSON-Daten empfangen möchten.


Wenn Sie nicht möchten, tatsächlich JSON-Daten erhalten, müssen Sie Ihre HTML-Code in einem Array wickeln, führen Sie es dann durch json_encode:

echo json_encode(array('html' => $html)); 

Dann in Ihrem JavaScript würden Sie die HTML-Zugriff durch das Objekt:

success: function (data, status, error) { 
    $('#CountryList').append(data.html); 
} 
+0

Ok, also habe ich 'json_encode (array ('html' => $ html))' wie du erwähnt implementiert, aber der Fehler bleibt bestehen. Was soll ich als nächstes tun? Wie würde ich nach einer Datensatzanzahl suchen, nur um festzustellen, ob irgendwelche Datensätze tatsächlich zurückgegeben werden? – TheoG

+0

Verwenden Sie Ihren Browser-Debugger und die Registerkarte Netzwerk (Filter für XHR), um die Ajax-Anfrage und -Antwort zu prüfen. Sie können die Antwort in der Vorschau anzeigen, als würden Sie auch normalerweise dorthin navigieren, wodurch Sie möglicherweise eine bessere Fehlermeldung erhalten. Stellen Sie außerdem sicher, dass "WP_DEBUG" in Ihrer Datei "wp-config.php" auf "true" gesetzt ist. –

+0

Ich bekomme einen Statuscode: 500 Interner Serverfehler, auf Methode Post to File admin-ajax.php. Irgendeine Idee, was hier passieren könnte? – TheoG