tag button con chiamata ajax

Salve ho un form (sottostante al form di login) ke mi dà la possibilità di chiedere una nuova password nel caso l’utente l’abbia smarrita o dimenticata.


.

.

<p class="input-with-button">

	<label for="recovery-mail">Enter your e-mail address</label>

	<input type="text" name="recovery-mail" id="recovery-mail" value="">

	<button type="button">Send</button>

</p>

.

.



Premesso che ho provato le varie proprietà/metodi della classe CHtml per renderizzare l’elemento come un <button> con relativa chiamata ajax (senza successo).

Vorrei passare i dati ad un controller/vista piuttosto che ad un file.php ma non sò come fare senza il CHtml, grazie :mellow:

consiglio: prima di scrivere sul forum, guarda almeno per 5 minuti la documentazione di yii, perchè se inizi a chiedere cose banali alla fine nessuno leggerà più i tuoi post.

http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxButton-detail

http://www.yiiplayground.cubedwater.com/index.php?r=AjaxModule/ajax/ajaxRequest

Giusto concordo è che non capisco il motivo per il quale abbia deciso di smettere di funzionare anche la funzione nativa




CController::createUrl('accesso/Recoverypassword');

ho copiato il codice x fare un test …


<?php

$url = CController::createUrl('accesso/Recoverypassword');

echo CHtml::ajaxLink(

'clicca qui',          // the link body (it will NOT be HTML-encoded.)

$url, // the URL for the AJAX request. If empty, it is assumed to be the current URL.

array('update'=>'#req_res')

);

?>


<div id="req_res">...</div>

ma se faccio un mouseover sul link generato, leggo ancora la URL attuale e non quella generate dalla funzione CController::createUrl :( perchè ?

createUrl() non e un metodo statico !

Nel controller lo chiami con $this->createUrl() perche tuttti i controller derivano dal CController.

Ti suggerisco di attivare il php error reporting - http://php.net/manua...nfiguration.php


error_reporting = E_ALL | E_STRICT

display_errors = On



Con questo settings anche i “notice” ed i “warning” verano riportati come errori e dovrai risolverli per continuare l’eseguzione del tuo codice… che in fine dara un codice piu migliore.

fatto non mi restituisce nulla come errore, scrutando con firebug la parte html

mi crea un


<a id="yt0" href="#">clicca qui</a>

la parte script


/*<![CDATA[*/

jQuery(function($) {

$('body').on('click','#yt0',function(){jQuery.ajax({'url':'/sanipack/index.php?r=accesso/Recoverypassword','cache':false,'success':function(html){jQuery("#req_res").html(html)}});return false;}); 

ma non succede nulla !! Ho controllato anche nella parte console di firebug, nulla!


error_reporting = E_ALL | E_STRICT

display_errors = On

Ti dovrebbe far nota che CController::createUrl() non e valido perche chiami u metodo non-statico in maniera statica.

Per mettere i settings in effetto si deve riaviare il PHP (apache).

Il codice mi sembra OK…

Sicome usi firebug, guarda nella finestra "console" per vedere se il ajax e stato inviato… e qualli dati ricevi…

Pasquale prova magari ad inserire nella index.php presente nella root come prima riga




<?php

error_reporting(E_ALL | E_STRICT);

-riavviato apache

-modificata riga:


$url = CController->createUrl('accesso/Recoverypassword');//funziona

-sezione console di firebug vuota!!

ho l’impressione che ci sia qualcosa che non vada con jQuery … qualer versione usa yii 1.1.9 ? :unsure:

L’ultima versione 1.7.1

Domanda fore un po stupida… pero… il jquery.js e incluso?

Non lo auto.include ? :blink:

rettifico:

se da firebug apro sezione script mi torna


/*!

* jQuery JavaScript Library v1.7.1

* http://jquery.com/

*

* Copyright 2011, John Resig

* Dual licensed under the MIT or GPL Version 2 licenses.

* http://jquery.org/license

*

* Includes Sizzle.js

* http://sizzlejs.com/

* Copyright 2011, The Dojo Foundation

* Released under the MIT, BSD, and GPL Licenses.

*

* Date: Mon Nov 21 21:11:03 2011 -0500 

In generale jquery viene automaticamente aggiunto… questo si puo disabilitare con il scriptmap o packages… non so se hai usato questi…

Il piu svelto metodo di testare questo sarebbe di creare un nuovo webapp e provare li il ajaxLink() codice cosi che ti accerti se funziona o no.

scriptmap nessuno, packages non credo (solo il modulo rights ho aggiunto) nn sò se si consideri un package.

Può essere un problema il fatto che ajaLink() sia all’interno di un blocco:


<?php $form=$this->beginWidget('CActiveForm', array(

				'id'=>'login-form',

				'enableClientValidation'=>true,

				'clientOptions'=>array(

					'validateOnSubmit'=>true,

				),

)); ?>

.

.

.

.

echo ayaxLink(xxx);

.

.

<?php $this->endWidget(); ?>

p.s.

Messo fuori dal blocco, non succede nulla ! :(

Fuori o dentro non fa differenza… dal codice che hai postano nel comment #5 tutto sembra OK… l’id del link e uguale a quello nel jQuery codice… non sapprei dire cosa puo essere senza testare il codice me stesso…

prova a mettere un alert() invece del ajax giusto per vedere se succede qualcosa quando fai click sul llink.

Nel frattempo ho creato 1 nuova webapp :( e funziona !!! Arghhh dov’è l’arcano ora !!! Provo l’alert…

Alert sull’onclick (inline), funziona. :blink:

Ho allegato la sezione Script di firebug, se può aiutare a capire :huh:

Ho anche provato:


<a id="miolink" href="#">click here</a>

<script>

$(document).ready(function(){

	$('#miolink').click(function() {alert('jQuery caricato');});});

</script>

funziona!

[SOLVED]

scoperto l’arcano… nel layout!

questo script caricato prima del tag <body>


<!-- Modernizr for support detection, all javascript libs are moved right above </body> for better performance -->

<script src="< ?php echo Yii::app()->theme->baseUrl; ?>/js/libs/modernizr.custom.min.js"></script>

se lo sposto in fondo (dopo il tag <body>) tutto torna a funzionare! :huh: