2010-11-15 41 views
0

我有一個項目清單中的JavaScript這樣:

var list = { 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
}; 

但是當我把它發佈到這樣的服務器:

$.ajax({ 
    url: '/Controller/ActionName', 
    data: { items: list } 
}); 

它到達這樣的服務器:

items[0][id]=1&items[0][name]=Charles&items[1][id]=8&items[1][name]=John&items[2][id]=13&items[2][name]=Sally 

如何使用JSON符號(即使用大括號)來獲得它!這樣.NET解析器可以正確解析它?

+0

ü需要把它轉換成字符串(JSON格式),然後將它張貼 – vinothkr 2010-11-15 08:23:50

+0

我如何做到這一點?我認爲下面的'djch'試圖在下面顯示這個,但是使用'stringify',我假設它來自外部庫。必須有內置到jQuery或JavaScript來做到這一點? – Jimbo 2010-11-15 08:40:32

+0

使用$ .post。 $ .ajax使用GET,這意味着沒有請求主體。 JSON不能放入查詢字符串中,它必須放在正文中。 – RPM1984 2010-11-15 09:05:51

回答

2

嘗試:

$.ajax({ 
    url: '/Controller/ActionName', 
    data: { items: JSON.stringify(list) } 
}); 

我已經試過以下選項:

<script type="text/javascript"> 

    var list = [ 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
]; 


    function run(){ 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: JSON.stringify(list) } 
     }); 

     return false; 

    } 

    function run2() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: list } 
     }); 
     return false; 

    } 

    function run3() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: { items: list }, 
      processData: false 
     }); 
     return false; 
    } 

    function run4() { 
     $.ajax({ 
      url: 'default.aspx', 
      data: list 
     }); 
     return false; 
    } 
</script> 

運行1:Default.aspx的項目=%5B%7B%22id%22%3A1%2C %22name%22%3A%22Charles%22%7D%2C%7B%22id%22%3A8%2C%22name%22%3A%22John%22%7D%2C%7B%22id%22%3A13%2C%22name %22%3A%22Sally%22%7D%5D

Querystring [「items」] ='[{「id」:1,「name」:「Charles」},{ 「id」:8,「name」:「John」},{「id」:13,「name」:「Sally」}]'

運行2:default.aspx?items%5B0%5D% 5Bid%5D = 1 & items%5B0%5D%5Bname%5D = Charles & items%5B1%5D%5Bid%5D = 8 & items%5B1%5D%5Bname%5D = John & items%5B2%5D%5Bid% 5D = 13 &項%5B2%5D%5Bname%5D =薩利

項[0] [ID] 1

項[0] [名稱]查爾斯

項[1] [ID ] 8

項[1] [名稱]約翰

項[2] [ID] 13

項[2] [姓名]薩利

試驗3:Default.aspx的[對象%20Object]

[對象的對象]

試驗4:查爾斯的Default.aspx =未定義&約翰=未定義&薩利=未定義

請求[ 「查爾斯」] = '未定義'

請求[ 「約翰」] = '未定義'

請求[ 「薩利」] = '未定義'

現在從OP,我認爲運行1是必需的選項,因爲他想在服務器端處理JSON字符串?

+0

謝謝,相當徹底的測試!這些也是我現在設法在服務器端獲得的。您是否能夠使用Run 1重新構建服務器端的數據?順便說一句,你可以有這個帖子和http://stackoverflow.com/questions/4164114/posting-json-data-to-asp-net-mvc點,如果你成功了! :) – Jimbo 2010-11-15 10:23:17

0

從jQuery AJAX Page

數據選項可以包含形式 鍵1 =值&鍵2 =值,或地圖上 形式{鍵的 查詢字符串:「VALUE1」 ,key2: 'value2'}。如果使用後一種形式,則 數據在發送之前會轉換爲查詢 字符串。這 處理可以通過 設置過程數據

所以你的JSON對象轉換爲查詢字符串被規避。

+0

我試着設置'processData:false',所有這些都是以某種方式神奇地發佈NO數據。我希望我可以調試jQuery,但... – Jimbo 2010-11-15 08:36:07

0

使用$ .post()而不是$ .ajax(),它應該適合你。

$ .ajax執行GET請求,這就是爲什麼它將您的JSON轉換爲字符串並附加到查詢字符串。

編輯: 它看起來像你正試圖發佈對象的列表,在這種情況下您var目錄應該物體的像這樣的數組:

var list = [ 
    { id: 1, name: 'Charles' }, 
    { id: 8, name: 'John' }, 
    { id: 13, name: 'Sally' } 
]; 


$.post({ 
    url: '/Controller/ActionName', 
    data: { "items": list } 
}); 
+0

我$ .ajax()有一個全局設置來強制POST,不幸的是仍然不能解決問題。 $ .post()也沒有。這裏的問題是jQuery如何序列化發佈數據... – Jimbo 2010-11-15 09:07:44

+0

嘗試'數據:列表'的參數爲'$ .post' – RPM1984 2010-11-15 09:09:59

+0

@jimbo:試試我上面的編輯。 – ace 2010-11-15 09:11:56

1

我在我的手機,但你可以通過使用以下庫將您的JSON對象轉換爲格式良好的JSON字符串來解決此問題。

jquery JSON project

圖書館僅3K的大小,也爲您提供了額外的JSON功能,如解析等

一旦納入您的網頁上的腳本,然後您可以將對象轉換爲JSON字符串,使您的通話使用:

$.ajax({ 
     type: "POST", 
     url: '/Controller/ActionName', 
     cache: false, 
     data: $.toJSON(list), // Convert JSON object to String for Post 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      GenerateResultsCallback(response.d) 
     }, 
     error: function (e) { 
      alert('error during ajax request'); 
     } 
    }); 
+0

+1感謝 - Google對他們的JSON內容非常堅實:) – Jimbo 2010-11-17 05:45:43

相關問題