2011-01-27 20 views
5

voglio postare queste variabili tramite la tecnologia AJAX:URL in AJAX POST

 <div class="vIn" id="star"> 
     <div id="inner"> 
     <span id="1" class="disabled"></span> 
     <span id="2" class="disabled"></span> 
     <span id="3" class="disabled"></span> 
     <span id="4" class="disabled"></span> 
     <span id="5" class="disabled"></span> 
     <input type="hidden" id="<?php echo $_GET['cID']?>" /> 
     </div> 
     </div> 

Con questo script:

$(document).ready(function(){ 
$('#inner span').click(function(){ 
    $(this).prevAll().andSelf().addClass('enabled'); 
    var a = $(this).attr("id"); 
    var cID = $("#inner input").attr("id"); 
    $.ajax({ 
      type: "POST", 
      url: "ajax/rating.php", 
      data: "value=+a+&cID=+cID+", 
      success: function(msg){ 
      alert(data); 
      } 
     }); 
    });}); 

Sul evento click, non v'è alcun avviso. Sto usando i dati giusti in $ .ajax? Grazie in anticipo.

+0

Stai cercando di avvisare la risposta dalla tua richiesta AJAX per caso? –

+1

dovrebbe essere: data: "value =" + a + "& cID =" + cID, –

+0

@Haim: No, non dovrebbe essere. È comunemente * è *, ma non dovrebbe essere. (Vedi 'encodeURIComponent' nel tuo riferimento JavaScript preferito.) ;-) –

risposta

6

che vi consiglio vivamente che permette jQuery per preoccuparsi correttamente codifica la stringa:

var a = $(this).attr("id"); 
var cID = $("#inner input").attr("id"); 
$.ajax({ 
    type: "POST", 
    url: "ajax/rating.php", 
    data: {value: a, cID: cID}, // <== change is here 
    success: function(msg){ 
     alert(msg); 
    } 
}); 

Si noti che sto passando data in $.ajax come oggetto, non come una stringa. jQuery lo codificherà correttamente per te. Vedi the docs per i dettagli.

Se davvero, vuole veramente fare la codifica da soli, bisogna farlo in modo esplicito:

data: "value=" + encodeURIComponent(a) + "&cID=" + encodeURIComponent(cID) 

anche notare che sto avvisando msg, non data, in quanto questo è ciò che hai chiamato il argomento di risposta a success.

2

C'è una sottile errore qui ...

 success: function(msg){ 
     alert(data); 
     } 

È possibile risolvere il problema in questo modo ...

 success: function(data){ 
     alert(data); 
     } 

C'è un altro errore qui ...

data: "value=+a+&cID=+cID+", 

Penso che questo dovrebbe essere ...

data: "value=" + a + "&cID=" + cID, 

Se non si ottiene ancora un avviso, si prega di urlare!

+1

Oppure' data: {value: a, cID: cID} 'che è migliore in quanto si occuperà della codifica del valore. –

+0

@Felix - up-vote su quel commento - buon suggerimento. – Fenton

0

Non sono esperto Javascript, ma non dovrebbe essere data: "value="+a+"&cID="+cID?

+0

No, non dovrebbe. Potrebbe essere 'data:" value = "+ encodeURIComponent (a) +" & cID = "+ encodeURIComponent (cID)', ma assolutamente non 'data:" value = "+ a +" & cID = "+ cID'. –

0

data: "value=+a+&cID=+cID+" sta tentando di concatenare i valori senza occuparsi di caratteri con significato speciale. L'URL potrebbe includere, ad esempio, un carattere &.

Questo è ciò che sta cercando di fare, ciò che sta effettivamente facendo è impostare la stringa letterale come valore. Il tentativo di includere variabili è solo la creazione di dati stringa.

Si dovrebbe avere:

data: { "value": a, "cID": cID } 
+0

Per essere corretti: 'data:" valore = + a + & cID = + cID + "' non concatena nulla. È una stringa. –

+1

@Felix - Notare l'uso della parola "provare" e l'intero secondo paragrafo della mia risposta. – Quentin

+0

Dorward: Mmh vero. Ma ancora, il codice non può * provare *. Ma comunque, niente rancore ... –

0

Ci sono alcuni problemi con l'utilizzo di $ .ajax

data: "value=+a+&cID=+cID+", 

'+' è l'operatore di concatenazione, quello che state facendo qui è la costruzione del stringa di dati utilizzando le variabili impostate in precedenza. Quindi è necessario concatenare le variabili con le stringhe "value =" ecc.

es.

data: "value="+a+"&cID="+cID,