2016-01-06 37 views
1

我包裝了一些值發回到ASP.NET MVC控制器操作。我得到無效的JSON原始異常,但我使用JSON.stringify並且感到困惑。JSON.stringify奇怪的行爲

我建立了一個名爲searchValues的搜索值。在我的代碼開放Chrome的控制檯把console.log(JSON.stringify({ "values": searchValues }));輸出以下

{"values":["name_last:foo"]} 

我使用的代碼SANS確切一些位console.log使用填充data參數Ajax調用。然而,看在提琴手的號召,正在發送的請求看起來像這樣

0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D 

我使用這個在劍道格但我確定它被作爲後這樣:

$("#search-preview").kendoGrid({ 
     columns: ...column stuff..., 
     dataSource: { 
      transport: { 
       read: { 
        url: "/SearchPreview", 
        dataType: "json", 
        data: JSON.stringify({"values": searchValues}), 
        type: "POST", 
        contentType: "application/json; charset=utf-8" 
       } 
      } 
     } 
    }); 

我可以在Fiddler中看到它在請求正文中發送,並且不會被附加到URL,例如它是GET。這裏發生了什麼?

編輯:

添加整個提琴手的請求是什麼樣子:

POST http://localhost/MvcTestBed/SearchPreview HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Content-Length: 149 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://localhost 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 
Content-Type: application/json; charset=UTF-8 
Referer: http://localhost/MvcTestBed 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Cookie: .... asp.net cookie fluff .... 

0=%7B&1=%22&2=v&3=a&4=l&5=u&6=e&7=s&8=%22&9=%3A&10=%5B&11=%22&12=n&13=a&14=m&15=e&16=_&17=l&18=a&19=s&20=t&21=%3A&22=f&23=o&24=o&25=%22&26=%5D&27=%7D 

編輯2:

我與jQuery的AJAX構造的processDatatraditional設置試驗,並我得到的最好的結果是現在的帖子主體看起來像

[object Object] 
+0

它看起來像字符串被當作一個字符數組,而不是直接使用。也許'數據'應該是一個對象,而不是一個字符串? –

+0

我對劍道並不是很熟悉,但是你確定它希望你自己做絃樂?我所使用的框架期望您只給它們基本的JSON對象,並且在請求期間它們會根據需要對其進行字符串化(可能基於內容類型) – Katana314

+0

@ Katana314我確信它們的讀取屬性是簡單的被傳遞給jQuery ajax調用。我按照你的建議試了一下,完全拿走了JSON.stringify。但它並沒有改變行爲。不管怎麼說,還是要謝謝你! – Bigsby

回答

1

根據你在調音器中得到的結果,它看起來像是在你的json字符串上調用了$ .param。 jQuery不這樣做,所以它必須是劍道網格。

一個解決方案是直接創建ajax請求,然後在成功時用結果初始化網格。

0

經過一番研究我的解決方案是使用read的功能:

$("#search-preview").kendoGrid({ 
    columns: ...column stuff..., 
    dataSource: { 
     transport: { 
      read: function (options) { 
       url: "/SearchPreview", 
       dataType: "json", 
       data: JSON.stringify({"values": searchValues}), 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       success: function (result) { 
        options.success(result); 
       }, 
       error: function (result) { 
        options.error(result); 
       } 
      } 
     } 
    } 
});