2012-04-09 20 views
35

我想發送多個數據使用j查詢$ .ajax方法到我的PHP腳本,但我可以傳遞只有單個數據時,我連接多個數據我得到未定義的索引錯誤在我的PHP腳本針鋒相對意味着Ajax請求已經作出,但數據不會發送我需要知道我應該如何格式的多個數據依次發送到在名谷對這裏處理腳本是我自己寫的

<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

我通常只是把相關的項目一個對象(或將它們留在它們的原始對象中),將整個對象轉換爲JSON字符串,然後在parm中發送JSON字符串。在服務器端,我有php將JSON字符串轉換回一個對象,瞧,我在做生意。 – 2012-04-09 18:49:33

回答

71

您可以創建鍵/值對的對象和jQuery將完成剩下的爲您提供:

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

這樣的數據會自動被正確編碼。如果你想編造你自己的字符串,則一定要使用encodeURIComponent()https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

您當前的代碼不工作,因爲字符串是不正確炮製:

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

應該是:

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

+1數據對象是要走的路。 – JAAulde 2012-04-09 18:53:55

+0

'id ='+ id&'name ='+ name +應該更改爲'id ='+ id +'&name ='+ name – 2016-09-04 11:21:00

+1

@SaeedAnsari除此之外,使用encodeURIComponent清理變量是個好主意'就像答案中的例子。沒有理由不防止XSS攻擊。 – Jasper 2016-09-06 15:49:28

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

&符號也需要引用:

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

+1,因爲這是問題的關鍵,儘管我會使用Jasper的答案中提出的數據對象。 – JAAulde 2012-04-09 18:53:28

+0

這工作BT我認爲&(&符號)在數據使代碼很難理解由@SKS給出的SOLN是好 – sohaan 2012-04-09 19:03:23

+0

@sohaan:是的,一個Javascript對象是一個更好的解決方案。 – xbonez 2012-04-09 19:04:02

8

更改var data = 'id='+ id & 'name='+ name;如下,

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

我會建議使用哈希,而不是設置了一個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'); 
     } 
    }); 

這已經爲我工作了相當長的一段時間。

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

你可以在我的程式碼中使用FormData

拿來看從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+"'}" 

您可以用這種方式來傳遞數據