2012-04-09 18 views
35

sto provando a inviare più dati utilizzando j query $ .ajax metodo al mio script php ma posso passare solo singoli dati quando concatenare più dati ottengo errore indice indefinito nel mio script php tat significa che la richiesta AJAX è fatta ma i dati non vengono inviati ho bisogno di sapere come devo formattare più dati da inviare successivamente alla elaborazione dello script in nome Vale coppia qui è quello che ho scritto

<script> 
    $(document).ready(function() { 

    $('#add').click(function() { 

     var name = $('#add').attr("data_id"); 

     var id = $('#add').attr("uid"); 

     var data = 'id='+ id & 'name='+ name; // this where i add multiple data using ' & ' 

     $.ajax({ 
     type:"GET", 
     cache:false, 
     url:"welcome.php", 
     data:data, // multiple data sent using ajax 
     success: function (html) { 

      $('#add').val('data sent sent'); 
      $('#msg').html(html); 
     } 
     }); 
     return false; 
    }); 
    }); 
</script> 



<span> 
    <input type="button" class="gray_button" value="send data" id="add" data_id="1234" uid="4567" /> 
</span> 
<span id="msg"></span> 
+0

Io di solito basta inserire gli elementi relativi a un oggetto (o lasciarli nel loro oggetto originale), convertire l'intero oggetto in una stringa JSON e inviare la stringa JSON in un parm. Sul lato server, ho php convertire la stringa JSON in un oggetto, e voilà, sono in affari. –

risposta

71

È possibile creare un oggetto di coppie chiave/valore e jQuery farà il resto per voi:

$.ajax({ 
    ... 
    data : { foo : 'bar', bar : 'foo' }, 
    ... 
}); 

In questo modo i dati saranno adeguatamente codificati automaticamente. Se si vuole inventare voi propria stringa quindi assicurarsi di utilizzare encodeURIComponent(): https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

Il codice attuale non funziona perché la stringa non è inventato correttamente:

'id='+ id & 'name='+ name 

dovrebbe essere:

'id='+ encodeURIComponent(id) + '&name='+ encodeURIComponent(name) 
+0

+1 L'oggetto dati è _la_ strada da percorrere. – JAAulde

+0

'id =' + id & 'name =' + nome dovrebbe essere cambiato in 'id =' + id + '& name =' + nome –

+1

@SaeedAnsari In aggiunta a ciò, è una buona idea disinfettare le variabili con 'encodeURIComponent 'come nell'esempio nella risposta. Nessun motivo per non proteggere dagli attacchi XSS. – Jasper

6
var data = 'id='+ id & 'name='+ name; 

La e commerciale deve anche essere citata:

var data = 'id='+ id + '&name='+ name; 
+0

+1 poiché questo è il nodo del problema, anche se utilizzerei l'oggetto dati suggerito nella risposta di Jasper. – JAAulde

+0

questo funziona bt credo e (e commerciale) nei dati rende il codice difficile da capire. Soln dato da @SKS è buono – sohaan

+0

@sohaan: Sì, un oggetto Javascript è una soluzione migliore. – xbonez

8

Change var data = 'id='+ id & 'name='+ name; come sotto,

var data = { 'id': id , 'name': name}; 
2

Ti consiglio di utilizzare un hash invece che una stringa param:

data = {id: id, name: name} 
4
var value1=$("id1").val(); 
var value2=$("id2").val(); 
data:"{'data1':'"+value1+"','data2':'"+value2+"'}" 
5
var my_arr = new Array(listingID, site_click, browser, dimension); 
    var AjaxURL = 'http://example.com'; 
    var jsonString = JSON.stringify(my_arr); 
    $.ajax({ 
     type: "POST", 
     url: AjaxURL, 
     data: {data: jsonString}, 
     success: function(result) { 
      window.console.log('Successful'); 
     } 
    }); 

Questo ha lavorato per me per un bel po 'di tempo.

0
var CommentData= "u_id=" + $(this).attr("u_id") + "&post_id=" + $(this).attr("p_id") + "&comment=" + $(this).val(); 
1

è possibile utilizzare FormData

prendere un'occhiata al mio frammento MVC

var fd = new FormData(); 
fd.append("ProfilePicture", $("#mydropzone")[0].files[0]);// getting value from form feleds 
d.append("id", @(((User) Session["User"]).ID));// getting value from session 

$.ajax({ 
    url: '@Url.Action("ChangeUserPicture", "User")', 
    dataType: "json", 
    data: fd,//here is your data 
    processData: false, 
    contentType: false, 
    type: 'post', 
    success: function(data) {}, 
0
var value1=$("id1").val(); 
    var value2=$("id2").val(); 
    data:"{'data1':'"+value1+"','data2':'"+value2+"'}" 

È possibile utilizzare questo modo per passare i dati

Problemi correlati