2015-04-25 11 views
5

Sto cercando di recuperare i dati da mysql in php e di restituirli in formato json a un controller (angolare).Errore durante la creazione di jSON in php

Durante la creazione di JSON, viene aggiunta una stringa indesiderata a causa della quale sto ricevendo un errore mentre attraversavo il json.

seguito è il mio codice PHP:

$json_response = array(); 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $row_array["name"] = $row["name"]; 
    $row_array["quantity"] = $row["quantity"]; 
    array_push($json_response,$row_array); 
} 
echo json_encode($json_response); 

E segue è l'output della console dopo la stampa del JSON (console è in controllore):

{itemData:{"data":[{"name":"item1","quantity":"10"},{"name":"item2","quantity":"20"},{"name":"item3","quantity":"25"}]  

<!-- Hosting24 Analytics Code --> 
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> 
<!-- End Of Analytics Code --> 

}} 

Sopra la parte evidenziata è in arrivo in JSON , a causa della quale sta accadendo l'errore.

Please help me per risolvere il problema.

+0

Che errore ottieni? – kratenko

+0

Posso suggerire di smettere di usare la libreria mysql? È deprecato. Passare a mysli o meglio a PDO. Ciò renderà il tuo codice ancora più sicuro! –

+0

Credo che sia qualcosa a che fare con il tuo host. Il codice aggiunto è uno script per il tracciamento che sembra essere stato creato dal tuo host. Credo che lo aggiungano ad ogni richiesta dal server. Prova a usare 'exit();' dopo 'echo json_'. Nel caso in cui ciò non aiuti: prova a utilizzare un host diverso o contattali. –

risposta

4

Ok, dopo aver un po 'di ricerca posso confermato che il mio commento è giusto. Il tuo codice va bene e la stringa JSON che si sta creando dal tuo codice va bene.

Tuttavia, gli indesiderati stringa allegata:

<!-- Hosting24 Analytics Code --> 
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> 
<!-- End Of Analytics Code --> 

viene collocata dal server. Credo che sia un server gratuito e quindi si permettono di iniettare il proprio codice nel tuo sito web. Hanno un meccanismo che accoda lo script in ogni richiesta che viene fatta dal tuo server (incluse le richieste di jax).

Poiché questo codice viene aggiunto dal server, sembra che non ci sia nulla che puoi fare nel tuo codice per superarlo. Sembra che l'unica opzione sia cercare un'altra società di hosting o avere un piano a pagamento.

Aggiornamento - È possibile provare e utilizzare la funzione exit(); subito dopo aver stampato la stringa json. Potrebbe spezzare l'iniezione dell'ospite.

+0

la tua soluzione sembra plausibile, ma dubito che il 'exit()' funzioni. Credo che lo script PHP dell'OP venga eseguito in un ambiente controllato e quando lo script viene terminato, l'ambiente aggiunge il messaggio su di esso prima di inviarlo alla risposta HTTP. – KarelG

+0

Grazie mille per l'informazione ... ha funzionato per me :) –

+0

@ KarelG, suggerisco una possibile soluzione basata su altri commenti e discussioni che ho trovato, altrimenti non ne parlerei. Naturalmente la soluzione migliore sarebbe quella di ottenere un piano di hosting a pagamento da una società di hosting decente. –

0

Dove $ conn è il tuo oggetto di connessione mysqli: -

$query = "SELECT name, quantity FROM tablename"; 

    if ($result = mysqli_query($conn, $query)) 
    { 
     $out = array(); 

     while ($row = $result->fetch_assoc()) 
     { 
      $out[] = $row; 
     } 

     echo json_encode($out); 
     mysqli_free_result($result); 

    } 
0

Per forgiare il tuo JSON, puoi utilizzare la piccola libreria Simple JSON for PHP.

include('includes/json.php'); 

$Json = new json(); 

$Json->add('status', '200'); 
$Json->add('message', 'Success'); 
$Json->add("data",$json_response); 

$Json->send(); 
Problemi correlati