2009-08-12 2 views
0

Dans ma demande, j'utilise après Ajax comme:Utilisation de la variable dans l'Ajax poster

$('#fb_contentarea_col3 #fb_contentarea_col1down2 #saveForm').live("click", function() { 
    if (!$("#formName").val() == "") { 
    if (saveDraft == 'on') 
     status = "Incompleted"; 
    else 
     status = "Completed"; 

    var formname = $("#formName").val(); 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost/FormBuilder/index.php/forms/saveForm/", 
     async: false, 
     data: "formname=" + formname + "&status=" + status, 
     success: function(msg) { 
     getformid = msg; 
     //returned FOrm id is saved in the JQuery variable 
     } 
     //success 
    }); 
    //ajax 

    $("#fb_contentarea_col1down21 div").each(function() { 
     alert("Form id " + getformid); 
     //alerts me the Form id retrieved 
     var checked = "false"; 
     var id = $(this).attr("id"); 
     var fsize = $("#input" + id + "").width(); 
     var ftype = $("#input" + id + "").attr('data-attr'); 
     var finstr = $("#instr" + id + "").text(); 
     var fname = $("#label" + id + "").clone().html().replace(/<span.*/, ''); 

     if ($("#label" + id + "> span.req").length > 0) 
     { 
     checked = "true"; 
     } 

     $.ajax({ 
     type: "POST", 
     url: "http://localhost/FormBuilder/index.php/forms/saveField", 
     async: false, 
     data: "sequence_no=" + id + "&name=" + fname + "&type=" + ftype + "&size=" + fsize + "&instr=" + finstr + "&formid=" + getformid + "&required=" + checked, 

     success: function(msg) { 
      //alert("Data Saved: " + msg); 
     } 
     //success 
     }); 
     //ajax 
    } 
    //for each DIv in mu design page i am saving them as Field 
    } 
    //if formname exists 
} 
//saveForm 

Le numéro de formulaire tel qu'il est retourné du côté du contrôleur est enregistré dans la variable getformid correctement, mais il ne se reflète pas dans la ajax saveField post..And il sauve que 0 ne même pas alerte que le formulaire de retour id..Please me suggérer ..

Remarque :: la question est une référence à

https://stackoverflow.com/questions/1264343/varaibles-inside-success-function-of-ajax-post

De plus je donne ici le code dans mon contrôleur pour SaveForm

function saveForm() 
{ 
    $this->data['Form']['name']=$this->params['form']['formname']; 
    $this->data['Form']['created_by']=$this->Session->read('userId'); 
    $this->data['Form']['status']=$this->params['form']['status']; 
    $this->data['Form']['access']="Private"; 
    $formId=$this->Form->saveForms($this->data); 

    $this->set('formId',$formId); 
} 

Et mon modèle saveForms est comme

function saveForms($data)//design saveForm 
{ 
    $this->data['Form']['name']=$data['Form']['name']; 
    $this->data['Form']['created_by']=$data['Form']['created_by']; 
    $this->data['Form']['status']=$data['Form']['status']; 
    $this->data['Form']['access']=$data['Form']['access']; 
    $this->save($this->data); 
    return $this->id;//returns the saved Form id to the controller 
} 

Et mon save_form.ctp dans le dossier mon point de vue est comme

<?php echo $formId;?> 

Répondre

4

Vous définissez getformid à l'intérieur du gestionnaire success pour l'appel AJAX, mais le code en utilisantgetformid est en dehors de cette fonction. N'oubliez jamais qu'au moment où vous appelez quelque chose comme $.ajax, la fonction revient immédiatement, avant que l'appel AJAX soit terminé, et certainement avant que votre fonction success ne soit exécutée. C'est ce qui le rend asynchrone.

Ainsi, tout code que vous voulez exécuter après la fin de la requête AJAX doit entrer dans cette fonction success (ou dans une autre fonction appelée success, bien sûr).

1

Vous pouvez créer une fonction et la transmettre comme un paramètre. Par exemple:

function param() { 
    this.array = new Array(1); 
    this.setValue = function(v) { this.array[0] = v; } 
    this.getValue = function() { return this.array[0]; } 
} 

puis dans votre requête ajax. faire quelque chose comme suit:

var formId = new param; 
$.ajax({ 
    type: "POST", 
    url: "http://localhost/FormBuilder/index.php/forms/saveForm/", 
    async: false, 
    data: "formname="+formname+"&status="+status, 
    success: function(msg){ 
      formId.setValue(msg); 
    }//success 
)}; 

Vous pouvez alors accéder à la valeur définie en appelant la méthode getValue() du formId variables