AJAX.viewRequest

El problema es el siguiente:

Necesito enviar una variable a dos funciones diferentes que se encuentran en un controlador. el problema es que nose como, ya que las dos funciones rescatan variables de diferentes maneras... me explico:


Index.phtml
<script type="text/javascript">
	new Event.observe("rubro_id", "change", function(){
		new AJAX.viewRequest({
			action: "busqueda/obtener_subrubros/"+$F("rubro_id"), container: "div_subrubro"
			})
		})
</script>

controlador:
function obtener_subrubros($rubro_id){

			$this->set_response("view");

			$this->subrubros = $this->Subrubro->find("rubro_id = '$rubro_id'");

		}

		function ver_sugerencias(){

			$this->set_response("view");

			$nombre = $this->request("nombre");

			$this->detalleitem = $this->Detalleitem->find_all_by_sql("SELECT * FROM detalleitem WHERE nombre like '%$nombre%' AND rubro_id = '$rubro_id'");
			}

si se dan cuenta en la consulta de la funcion ver_sugerencias, se necesita la variable rubro_id.

Es posible que AJAX.viewRequest envie esa variable a la funcion ver_sugerencias y obtener_subrubros?

Comentarios

  • Asi no es como funciona amigo, en el libro hay un ejemplo del text_field_with_autocomplete en el capitulo de pasos de baile con kumbia

    Saludos
  • edited 3:54
    No creo que hayas entendido el problema... <!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? -->
    el live search si funciona, el problema es el siguiente:
    necesito enviar por medio del AJAX.viewRequest una variable a dos funciones diferentes que se encuentran en un controlador. se entiende?

    el AJAX.viewRequest, si te fijas tiene una accion que hace lo siguiente
    new AJAX&#46;viewRequest&#40;&#123;
    			action&#58; &quot;busqueda/obtener_subrubros/&quot;+$F&#40;&quot;rubro_id&quot;&#41;, container&#58; &quot;div_subrubro&quot;
    			&#125;&#41;
    
    envia el helper $F a busqueda/obtener_subrubros por medio de la URL, pero tambien necesitoqueenvie esa mismavariable a la funcion buqueda/ver_sugerencias pero que no sea por medio de la URL, que sea posible rescatar con $rubro_id = $this->request("rubro_ïd");

    si ves el codigo que mostre antes puedes entender mejor.

    OJalá me ayudáran. Gracias
  • edited 3:54
    por lo que estuve leyendo, nosesi podré hacerlo con la clausula parameters de AJAX.viewRequest?

    si es asi, necesitaria un AJAX,viewRequest dentro de otro? y si fuera asi, como rescato la variable en la funcion si la envio con parameters

    <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Question" /><!-- s:?: --> <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
  • por lo que estuve leyendo, nosesi podré hacerlo con la clausula parameters de AJAX.viewRequest?

    si es asi, necesitaria un AJAX,viewRequest dentro de otro? y si fuera asi, como rescato la variable en la funcion si la envio con parameters

    <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Question" /><!-- s:?: --> <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->

    A ver si te comprendo,

    Necesitas invocar dos métodos del controlador simultáneamente después de recibir un evento (ej. onclick sobre un botón), entonces si es eso, la solución es colocar un llamado a cada método mediante un AJAX.viewRequest para cada uno, para esto puedes colocar dos AJAX.viewRequest en una función JavaScript y en tu evento invocar esa función JavaScript.

    Por ejemplo, suponiendo que tienes un botón y que al hacer click en ese botón quieres mostrar un saludo en ingles y otro en español en capas diferentes, quedaría algo así:
    &lt;script  type='text/javascript'&gt;
    function saludar&#40;&#41;&#123;
    new AJAX&#46;viewRequest&#40;&#123;
             action&#58; &quot;saludar/hola/&quot;+$F&#40;'saludo'&#41;, container&#58; &quot;div_saludo_esp&quot;
             &#125;&#41;;
    new AJAX&#46;viewRequest&#40;&#123;
             action&#58; &quot;saludar/hello/&quot;+$F&#40;'saludo'&#41;, container&#58; &quot;div_saludo_eng&quot;
             &#125;&#41;;
    &#125;
    &lt;/script&gt;
    


    ...
    <input id="saludo" onclick="saludar();">
    ...

    Nota: Lo del saludo es solo por colocar un ejemplo sencillo.
  • edited 3:54
    eso es lo que pretendo hacer, pero la diferencia radica en que la segunda funcion en donde recibo la variable con el segundo view.Request, no la recibe.

    esta es la primera funcion ke recibe el primer view.Request y no hay ningun problema.
    function obtener_subrubros&#40;$rubro_id&#41;&#123;
    
             $this-&gt;set_response&#40;&quot;view&quot;&#41;;
    
             $this-&gt;subrubros = $this-&gt;Subrubro-&gt;find&#40;&quot;rubro_id = '$rubro_id'&quot;&#41;;
    
          &#125;
    

    pero es en esta funcion, que no recibe la variable enviada con el segundo view.Request. porque esta funcion a su vez recibe una variable nombre enviada con el autocompletar.
    function ver_sugerencias&#40;&#41;&#123;
    
             $this-&gt;set_response&#40;&quot;view&quot;&#41;;
    
             $nombre = $this-&gt;request&#40;&quot;nombre&quot;&#41;;
    
             $this-&gt;detalleitem = $this-&gt;Detalleitem-&gt;find_all_by_sql&#40;&quot;SELECT * FROM detalleitem WHERE nombre like '%$nombre%' AND rubro_id = '$rubro_id'&quot;&#41;;
             &#125;
    

    si te das cuenta para realizar la consulta necesito la variable $nombre, enviada con el autocompletar y la variable $rubro_id que necesito enviar con el view.Request al producirce un evento.
  • Podrias hacer lo siguiente:

    Para javascript
    new AJAX&#46;viewRequest&#40;&#123;
             action&#58; &quot;busqueda/ver_sugerencias/&quot;+$F&#40;&quot;rubro_id&quot;&#41;, container&#58; &quot;div_subrubro&quot;
             &#125;&#41; 
    

    Y en el controlador
    function ver_sugerencias&#40;$rubro_id=false&#41;&#123;
        //aqui adaptas tu codigo a lo que necesites
    &#125;
    

    La idea basicamente es utilizar un valor por defecto y de esta manera sabes cuando se busca por el rubro_id ($rubro_id!=false), y cuando es por nombre (rubro_id==false).

    Utilizar un valor por defecto, te permite utilizar la accion del controlador, con parametros o sin parametros.

    Si no satisface lo que necesitas, explica con mayor detalle para ayudarte a resolver el problema.

    Saludos.
  • edited 3:54
    uhm... voy a ver si funciona men, me gusto tu idea de resolver el problema, de ahi comento como me fue gracias
Sign In or Register to comment.