2012-04-08 17 views
1

Ich verwende diese PHP-Funktionen zu laden und senden Sie sie an Javascript in einem Plugin, wie zu senden:json_encode Verwendung zu html gibt „null“ Zeichenfolge am Ende

function me_nav_query_submit() { 

    $urlcall = nav_me_paises(); /* fetches a large html string */ 
    $response = json_encode($urlcall); /* encode to display using jQuery */ 

    //header("Content-Type: application/json"); 
    echo $response; 

    exit; 
} 

ich legen Sie die HTML-Datei auf der Seite mit

function(response) { 
    jQuery('#navcontainer').html(response); 
} 

und alles funktioniert gut, außer dass ich am Ende des Ergebnisses eine "Null" Zeichenfolge erhalten.

json_encode() Dokumentation spricht über Null-Strings auf Nicht-Utf-8 Zeichen, aber das scheint nicht der Fall zu sein. Ich habe auch versucht, utf8_encode() ohne Erfolg zu verwenden. Ich habe eine Reihe anderer Fragen hier auf SO gelesen, aber die meisten von ihnen sprechen entweder über einen gegebenen Wert, der als Null oder schlechte UTF-8-Kodierung zurückgegeben wird, und in meinem Fall funktioniert alles und fügt dann "null" an das Ende an.

Hinweis: Definieren, dass Header() Aufruf in der WP-Codex empfohlen wird, aber ich habe es kommentiert, weil es einen "Header bereits gesendet" -Fehler gab.

Irgendwelche Ideen?

EDIT ist dies die Funktion aufgerufen:

function nav_me_paises() { 
    ?> 
    <ul class="navcategorias"> 
     <?php $tquery = $_POST['wasClicked']; ?> 
     <?php $navligas = get_terms($tquery,'hide_empty=0') ?> 
     <?php foreach ($navligas as $liga) : ?> 
      <?php $link = get_term_link($liga); ?> 
      <li class="liga"><a href="<?php echo $link; ?>" ><?php echo $liga->name; ?></a></li> 
     <?php endforeach; ?> 
    </ul> 
    <?php 
} 
+0

allererst müssen wir Ihre nav_me_paises() sehen und wie für den Header, sollte es sein, bevor eine Ausgabefunktion – Adi

+0

bearbeitet enthalten :) – moraleida

+1

Bitte nicht falsch Art und Weise tun, aber Ihr Code-Lese wurde wirklich eine Qual. – Adi

Antwort

3

nav_me_paises() wird nichts zurück. Der HTML-Block wird als Ausgabe behandelt!

function nav_me_paises() { 
$output = '<ul class="navcategorias">'; 
$tquery = $_POST['wasClicked']; 
$navligas = get_terms($tquery,'hide_empty=0') 
foreach ($navligas as $liga) { 
    $link = get_term_link($liga); 
    $output .= '<li class="liga"><a href="'.$link.'" >'.$liga->name.'</a></li>'; 
    } 
    $output .='</ul>'; 
    return $output; 
} 
+1

wie peinlich war das, nicht wahr? Vielen Dank :) – moraleida

1

nav_me_paises() gibt nichts zurück. Das Übergeben dieses "Nichts" an json_encode() ergibt "null". Konvertieren Sie die Funktion so, dass sie die HTML zurückgibt statt dessen Ausgabe

function foo() 
{ 
}; 

var_dump(json_encode(foo())); 
string(4) "null" 
0

Auch wenn es einfach nur HTML ist, warum es JSon? Senden Sie es einfach an JS, es wird eine Zeichenfolge sein, die in einer Variablen gespeichert ist, und Sie behandeln es normal.

Ich nehme an, alles, was Sie tun möchten, ist, dass HTML in ein div eingefügt wird, weil Sie es nicht in ein DOM parsen und seine Elemente verarbeiten würden ... denn wenn Sie das tun würden Sie nicht HTML dafür verwenden .

Verwandte Themen