2012-05-02 11 views
7

Estoy trabajando en una función de marcadores en la que el usuario hace clic en un botón jQueryui y cierta información se envía a la base de datos. Pero no estoy usando un formulario, porque no hay información para que el usuario ingrese.haga clic en el botón jquery + envíe datos sin formulario - marcador

estoy tirando el ID del usuario a partir de los datos de la sesión, y estoy enviando un segmento URI (parte de la URL)

Usando CodeIgniter/php.

Estoy tratando de averiguar qué poner en la porción de datos de la función ajax/post, ya que no hay forma/no se ingresaron datos, y qué hacer con la parte "enviar" del controlador.

controlador

function addBookmark(){ 

     if ($this->input->post('submit')) { 

      $id = $this->session->userdata('id');    
      $bookmark = $this->uri->segment(3, 0); 

      $this->bookmarks_model->postBookmark($id, $bookmark); 
     } 

    } 

Modelo

function postBookmark() { 

    $data = array(
      'user_id' => $user_id, 
      'bookmark_id' => $bookmark, 
    ); 

    $this->db->insert('bookmarks', $data); 

    } 

HTML

<button class="somebutton">Add bookmark</button> 

jQuery

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

      $.ajax({ 
       url: 'controller/addBookmark', 
       type: 'POST', 
       data: ???, 
       success: function (result) { 
        alert("Your bookmark has been saved"); 
       } 
      }); 

    }); 
+0

¿Cómo está conectado el modelo? – wallyk

+0

@wallyk El modelo (bookmarks_model) está conectado al controlador por la última línea de la función del controlador. – chowwy

Respuesta

8

Tu problema es que eres buscando una clave submit en el POST args. Puede fingir enviando data: {submit:true} o mediante la eliminación de su sentencia if y justo el procesamiento de una solicitud POST

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

     $.ajax({ 
      url: 'controller/addBookmark', 
      type: 'POST', 
      data: {'submit':true}, // An object with the key 'submit' and value 'true; 
      success: function (result) { 
       alert("Your bookmark has been saved"); 
      } 
     }); 

}); 
+0

Intenté esto con datos: {submit: true} y sin datos. También lo intenté sin la función if. Recibo la alerta, pero no se agrega nada a la base de datos. – chowwy

+0

De acuerdo, hice algunas maniobras con mis botones y ahora está funcionando, sin nada en el campo de datos como sugirió. En cambio, agregué un campo oculto para que los datos pasaran. He aceptado y votado su respuesta, ya que fue la más cercana. (¡Ahora si puedo hacer que la alerta funcione!) :) – chowwy

0

En lugar de utilizar .ajax() uso ya sea .get() o .post()

Usando .get()

$.get('controller/addBookmark',function(data){ 
    alert('Your bookmark has been saved'); 
}); 

Usando .post()

$.post('controller/addBookmark', function(data) { 
    alert('Your bookmark has been saved, The contents of the page were:' + data); 
}); 
+0

Gracias, voy a intentarlo ahora. ¿Qué debería estar en el lugar de "datos"? ¿Solo la palabra datos? – chowwy

+0

'data' es el resultado de la página en la devolución de llamada. –

+0

Bien; ¿Cómo indico datos en la función? No tengo ninguna entrada – chowwy

0

de la documentación de jQuery.ajax()

Los datos que se envían al servidor. Se convierte en una cadena de consulta, si aún no es una cadena. Se adjunta a la url para solicitudes GET.

Si no sabe qué poner para los datos, ¿probablemente debería eliminar esa opción? En su función de controlador addBookmark(), puede reducir el código eliminando la verificación if. Pruebe esto y vea si funciona para usted.

+0

Gracias; Intenté esto, pero no se enviaron datos a la base de datos – chowwy

+0

@chowwy revise su código '$ this-> bookmarks_model-> postBookmark ($ id, $ bookmark);' en su controlador y 'función postBookmark() {' en su modelo , es la llamada hecha correctamente? – Jasonw

+0

Sí, son correctos. – chowwy

Cuestiones relacionadas