Pues escribo ya que tengo una dudilla y a ver si podéis ayudarme aquí!
Estoy realizando un proyecto en CodeIgniter, es una página web con Front y BackEnd. En esta última parte, de administración, es donde se interactua con la base de datos: inserción, modificación, eliminar datos...
La cuestión es que estoy en la parte de eliminar datos y tengo la vista HTML donde muestro un formulario con: select, textarea y botón eliminar.
Dentro de ese select me salen de opciones los diferentes productos que están en la BBDD. Hasta ahí bien.
Lo que me gustaría conseguir es que cuando se seleccione un producto de ese desplegable, en el textarea me salga el resto de información de ese producto (nombre y precio).
Cómo podría implementarlo??
Muchas gracias de antemano!!
Podéis ver el código más reciente en el último post: aquí
en el foro que has compartido una persona te ha respondido que lo hagas con ajax, yo también lo haría que al cambiar la opción del selector cargue la información del producto seleccionado y muestre la descripción de este en el textarea sin recargar la página entera.
prueba de meter este código después del formulario:
https://gist.github.com/miquelcamps/460b29e98346713b196f
aunque tendrías que cambiar la ruta rollo http://dominio.com/producto/?id= y que la ruta de destino devuelva la descripción del artículo en texto plano.
puedes usar la consola que viene con el inspector chrome por si hay algún error de javascript y también la pestaña network para ver si se realiza la llamada ajax que consulte la información del producto.
Muchas gracias por la respuesta!
Lo agradezco mucho!
Mira, he estado probando pero no funciona :S
Tengo este código en la vista:
$("#product").change(function() {
var id = $("#product").val();
alert("Antes del ajax");
$.ajax({
alert("dentro ajax");
url: "localhost/Somnis?obtenedatos&id="+id;
}).done(function(datos) {
alert("hecho!");
$("#info").val(datos);
});
});
He puesto alerts a modo de debugar,... Pero no me hace ningún alert :S
Qué tengo mal?
A parte de eso...
En la url le paso después del interrogante 'obtenerdatos' que es el controlador siguiente:
..
public function index(id) {
$this->load->model('home/productosModel');
$datos['query'] = $this->productosModel->getProductosId($id);
header('Content-Type: application/json');
echo json_encode($datos);
}
...
Dentro del index le pongo 'id' entre paréntesis ya que es lo que le paso en la url del ajax, y luego se la paso al model (concretamente al método getProductosId) que hace el select from...
He añadido el echo json_encode($datos); que vendría a ser el 'return' de obtener datos para devolverselos al ajax...
Pero no funciona,..
function obtenerDatos(valorSelect){
$.ajax({
url: base_url+'ajax/obtenerDatosBD/',
data: {v : valorSelect},
type: "POST",
success: function(datos){
//Ten en cuenta si datos viene en formato JSON para tratarlos como quieras.
$('#DondeQuierasColocarLosDatos').html(datos);
}
});
}
----------------------------------------------------------------
public function obtenerDatosBD()
{
$valor = $this->input->get_post('v');
$datos = $this->ajax_model->get_datos($valor);
//Ya dependiendo de los datos que sean deberias o bien pasarlos a JSON.
//Y los devuelves con un echo y ya lo tienes en tu función de JavaScript para hacer con ellos lo que quieras.
Efectivamente me lo mostraba, he eliminado la línea y ya está.
Ahora el script lo tengo así:
$("#product").change(function() {
var id = $("#product").val();
alert("Antes del ajax");
$.ajax({
url: "obtenedatos"
}).done(function(datos) {
alert("hecho!");
$("#info").val(datos);
});
});
El primer alert me lo saca sin problemas, pero ahí se queda. Ni segundo alert ni nada, porqué se queda donde la url. Me da el siguiente mensaje de error la consola:
GET http://localhost/Somnis/obtenerdatos 404 not found
He intentado poner la ruta entera, con variables, sin variables.. pero no funciona..
obtenerdatos es el controlador con esta función:
public function index(aquiiriaelidquelepasariadelavista) {
$this->load->model('productosModel');
$datos['query'] = $this->productosModel->getProductosId($id);
header('Content-Type: application/json');
echo json_encode($datos);
}
Estoy hecho un lioo! hahaha
Siento ser tan pesado chic@s.. Espero que me podáis ayudar!
no tengo experiencia con codeigniter, te recomiendo que mires la documentación para crear las rutas
http://ellislab.com/codeigniter/user-guide/general/routing.html
Pues escribo ya que tengo una dudilla y a ver si podéis ayudarme aquí!
Estoy realizando un proyecto en CodeIgniter, es una página web con Front y BackEnd. En esta última parte, de administración, es donde se interactua con la base de datos: inserción, modificación, eliminar datos...
La cuestión es que estoy en la parte de eliminar datos y tengo la vista HTML donde muestro un formulario con: select, textarea y botón eliminar.
Dentro de ese select me salen de opciones los diferentes productos que están en la BBDD. Hasta ahí bien.
Lo que me gustaría conseguir es que cuando se seleccione un producto de ese desplegable, en el textarea me salga el resto de información de ese producto (nombre y precio).
Cómo podría implementarlo??
Muchas gracias de antemano!!
Podéis ver el código más reciente en el último post: aquí
Saludos!
20/05/2014 15:47
en el foro que has compartido una persona te ha respondido que lo hagas con ajax, yo también lo haría que al cambiar la opción del selector cargue la información del producto seleccionado y muestre la descripción de este en el textarea sin recargar la página entera.
prueba de meter este código después del formulario:
https://gist.github.com/miquelcamps/460b29e98346713b196f
aunque tendrías que cambiar la ruta rollo http://dominio.com/producto/?id= y que la ruta de destino devuelva la descripción del artículo en texto plano.
puedes usar la consola que viene con el inspector chrome por si hay algún error de javascript y también la pestaña network para ver si se realiza la llamada ajax que consulte la información del producto.
un saludo
20/05/2014 16:18
Lo agradezco mucho!
Mira, he estado probando pero no funciona :S
Tengo este código en la vista:
$("#product").change(function() {
var id = $("#product").val();
alert("Antes del ajax");
$.ajax({
alert("dentro ajax");
url: "localhost/Somnis?obtenedatos&id="+id;
}).done(function(datos) {
alert("hecho!");
$("#info").val(datos);
});
});
He puesto alerts a modo de debugar,... Pero no me hace ningún alert :S
Qué tengo mal?
A parte de eso...
En la url le paso después del interrogante 'obtenerdatos' que es el controlador siguiente:
..
public function index(id) {
$this->load->model('home/productosModel');
$datos['query'] = $this->productosModel->getProductosId($id);
header('Content-Type: application/json');
echo json_encode($datos);
}
...
Dentro del index le pongo 'id' entre paréntesis ya que es lo que le paso en la url del ajax, y luego se la paso al model (concretamente al método getProductosId) que hace el select from...
He añadido el echo json_encode($datos); que vendría a ser el 'return' de obtener datos para devolverselos al ajax...
Pero no funciona,..
Sabríais cómo solucionarlo??
Muchas gracias nuevamente!
Saludos!
29/05/2014 11:10
Prueba esto:
JavaScript------------------------------------
function obtenerDatos(valorSelect){
$.ajax({
url: base_url+'ajax/obtenerDatosBD/',
data: {v : valorSelect},
type: "POST",
success: function(datos){
//Ten en cuenta si datos viene en formato JSON para tratarlos como quieras.
$('#DondeQuierasColocarLosDatos').html(datos);
}
});
}
----------------------------------------------------------------
Controlador AJAX----------------------------------------
public function obtenerDatosBD()
{
$valor = $this->input->get_post('v');
$datos = $this->ajax_model->get_datos($valor);
//Ya dependiendo de los datos que sean deberias o bien pasarlos a JSON.
//Y los devuelves con un echo y ya lo tienes en tu función de JavaScript para hacer con ellos lo que quieras.
echo $datos;
}
---------------------------------------------------------------
Espero que estoy te sirva algo, al menos para encauzarte el camino :)
20/05/2014 16:24
alert('dentro ajax');
no debería ir allí y te tendría que salir algún error de js.
¿si no te da error has mirado la pestaña network del inspector por si hace la llamada en segundo plano?
20/05/2014 17:31
Efectivamente me lo mostraba, he eliminado la línea y ya está.
Ahora el script lo tengo así:
$("#product").change(function() {
var id = $("#product").val();
alert("Antes del ajax");
$.ajax({
url: "obtenedatos"
}).done(function(datos) {
alert("hecho!");
$("#info").val(datos);
});
});
El primer alert me lo saca sin problemas, pero ahí se queda. Ni segundo alert ni nada, porqué se queda donde la url. Me da el siguiente mensaje de error la consola:
GET http://localhost/Somnis/obtenerdatos 404 not found
He intentado poner la ruta entera, con variables, sin variables.. pero no funciona..
obtenerdatos es el controlador con esta función:
public function index(aquiiriaelidquelepasariadelavista) {
$this->load->model('productosModel');
$datos['query'] = $this->productosModel->getProductosId($id);
header('Content-Type: application/json');
echo json_encode($datos);
}
Estoy hecho un lioo! hahaha
Siento ser tan pesado chic@s.. Espero que me podáis ayudar!
Saludos y gracias de nuevo!
20/05/2014 17:54
http://ellislab.com/codeigniter/user-guide/general/routing.html