2012-01-19 26 views
5

Cuando intento mostrar los datos con getJSON no ocurre nada, $('#child-left-container-2') debe mostrar los datos del archivo php. ¿Dónde me equivoqué? ... A continuación se muestra un breve ejemplo de mi código.getJSON con jquery

archivo PHP

while($row = mysql_fetch_assoc($query)) { 

//code 

    $array[] = "<div class='array-container-2' $style id='$id' data-sid='$sid' data-user='$user'>$details1</div>"; 


      } 

      echo json_encode($array); 

jQuery

$(function() { 
    $('.next_button').click(function() { 

var id = $('#container').find('.graphic-blank:visible').siblings().attr('id'); 

     $.getJSON('fetchstack.php?id='+id,function(data) { 

      $('#child-left-container-2').html(''); //clear div 

      $.each(data,function(i,result) { 
       $('#child-left-container-2').append(result); 
      }); 
     }); 

      }); 
}); 
+1

Try 'console.log()' 'en el data' objeto para ver si se trata de la inserción dom o JSON conseguir que está teniendo problemas –

+1

de verificación en la consola de Firebug para errores ... – Rafay

+1

Significa tiene un error en su script PHP y no está recibiendo respuesta JSON. –

Respuesta

0

En la segunda línea de su jQuery

var id = $('#container').find('.graphic-blank:visible').siblings().attr('id'); 

que está intentando acceder al atributo id de una matriz de objetos jQuery (el siblings()). Es necesario especificar un objeto jQuery para obtener el ID de su función $getJSON

actualización Si hay un solo hermano, especifique esto haciendo

var id = $('#container').find('.graphic-blank:visible').siblings().eq(0).attr('id'); 
+0

solo hay un hermano. – user892134

0

no me refiero a insultarte en absoluto , pero lo que estás haciendo es una mala práctica. Si crea el HTML desde el lado del cliente, puede tener solicitudes más cortas. Además, si usa Firebug, puede ver un gráfico de su salida JSON. Es realmente una característica ingeniosa. También puede verificar si se guarda en la sección DOM en Firebug. Buena suerte.

+0

¡No insultado! ¡Tienes razón! se puede ver en la consola, pero como dije al principio de la respuesta (esta es mi solución) y me funciona bien. Utilizo esto porque mi aplicación está dentro de un proyecto XCODE, por lo que ninguna consola para la aplicación nativa y todos mis datos JSON generados también se ven en la aplicación. Presto mucha atención a mi JSON generado y les aconsejo a todos que hagan eso. ¡Y esta mala práctica es muy confiable! – aki

0

antes de configurar la respuesta a html con elementos para depurarlo con console.log,

no veo que ha creado un div a response = $('#child-left-container-2') cheque si tiene

<div id="child-left-container-2" /> 

y comprobar que RESPUESTA , maby the json in under array ... intente console.log(data) y abra debueger con F12

1

No sé si esto solucionaría el problema que está experimentando, pero esto sería b e cómo resolvería este problema en particular. Prueba este código, si funciona, dejar de enviar html a través de json sería una ventaja.

$key = 0; 
while($row = mysql_fetch_assoc($query)) { 
    //code 
    $array[$key]['id']  = $id; 
    $array[$key]['sid']  = $sid; 
    $array[$key]['user'] = $user; 
    $array[$key]['content'] = $details1; 
    $array[$key]['style'] = $style; 
    $key++; 
} 

echo json_encode($array); 

JS:

$(function() { 
    $('.next_button').click(function() { 

     var id = $('#container').find('.graphic-blank:visible').siblings().attr('id'); 
     $.getJSON('fetchstack.php?id='+id,function(data) { 
      $('#child-left-container-2').html(''); //clear div 

      for (var i in data){ 
       var id  = data[i].id; 
       var sid  = data[i].sid; 
       var user = data[i].user; 
       var content = data[i].content; 
       var style = data[i].style; 
       $('#child-left-container-2').append($('<div />').addClass('array-container-2')attr('id', id) 
       .attr('data-sid', sid).attr('data-user', user).html(content); 
      }   
     }); 
    }); 
}); 

Confieso que no saber qué estilo es $ o cómo aparecería prestado no podía añadirlo a la cadena. Si publica el contenido de $ style, puedo actualizar el estilo. Espero que esto ayude.

+0

el que pregunta debe probar esto. – VKGS

0

¿Por qué simplemente no repite el código HTML en el archivo PHP y luego llena el contenedor con él?

while($row = mysql_fetch_assoc($query)) { 
    echo "<div class='array-container-2' $style id='$id' data-sid='$sid' data-user='$user'>$details1</div>"; 
} 

$.getJSON('fetchstack.php?id='+id,function(data) { 
    $('#child-left-container-2').html(data); 
}); 
0

Bueno este es mi solución y funciona sin defectos:

PHP:

<?php 

ini_set('magic_quotes_gpc', false); 
header('Content-type: text/plain'); 

     //DB connection credentials 
$dbhost = 'hostname'; 
$dbuser = 'database_username'; 
$dbpass = 'database_password'; 
$dbname = 'database_name'; 

// allow cross-browser acces 
header('Access-Control-Allow-Origin: *'); 

// query SQL 
$sql = "do your DB query SELECT what ever here"; 

    //do our thingies withouth hacks (SQL Injection, etc) 
try { 
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
$dbh->query("set names utf8"); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$stmt = $dbh->query($sql); 
$json_export = $stmt->fetchAll(PDO::FETCH_OBJ); 
$dbh = null; 

    // return JSON format DATA 
echo '{"items":'. json_encode($json_export) .'}'; 
} catch(PDOException $e) { 

    // return error 
echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 

?> 

Listview HTML:

<div data-role="page" id="myPage"><div data-role="content" id="myContent"> 
     //my HTML list tag 
    <ul data-role="listview" id="myList"></ul> 
</div></div> 

JavaScript

//trigger script on show page 
$('#myPage').live('pageshow',function (event) { 
     //get our JSON data 
    $.getJSON('path_to_your_php_json_generator_file_declared_upper',function(data){ 
      //append our JSON data to a variable 
     var json_entries = data.items; 
       //for each JSON data, append it to our list as one element 
     $.each(json_entries,function(index,entry){ 
      $('#myList').append('<li><a href="#">' + entry.title + '</a></li>'); 
      //assuming we have a field named "title" in JSON data 
     }); 
      //refresh the list for layout (style) loading 
     $('#myList').listview('refresh'); 
    }); 
}); 

Y así es como llenas una lista en jQuery Mobile con datos JSON generados por un archivo php. Puede adaptar este tipo de script a cada intérprete JSON en su código jQuery, ¡incluso con parámetros (id, categoría, etc.)!

¡Espero que ayude de una forma u otra!

0

intenta poner este juste antes de echo json_encode($array);. Eventualmente ingrese una llamada de salida para evitar producción adicional.

header('Content-type:application/json;charset=utf-8'); 
echo json_encode($array); 
exit(); 
Cuestiones relacionadas