2013-03-06 78 views
3

我想通過使用Jquery.param將它編碼到URI中來發送一個JSON到服務器,但我得到以下錯誤。如何在查詢字符串中傳遞json?

window.location.href = BriefExportPath+$.param(JSON.stringify({ 
         title: $('.ui-dialog-title').text(), 
         items: ko.utils.arrayMap(Neptune.BriefCountrySection.SelectedCountries(), function (item) { 
          return item.ItemName 
         }) 
        })) 



[CustomAuthorize(Definitions.RoleSonarAdmin)] 
     public FileContentResult ExportCsv(string json) 
     { 
      var x = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      object obj = x.DeserializeObject(json); 
      //return File(Helpers.BriefCsvBytes.GetCsvBytes(items), "text/csv", title); 
      return null; 
     } 



http://dev.neptune.local/Briefs/ExportCsv?0=%7B&1=%22&2=t&3=i&4=t&5=l&6=e&7=%22&8=%3A&9=%22&10=B&11=r&12=i&13=e&14=f&15=+&16=C&17=o&18=u&19=n&20=t&21=r&22=y&23=+&24=L&25=i&26=s&27=t&28=%22&29=%2C&30=%22&31=i&32=t&33=e&34=m&35=s&36=%22&37=%3A&38=%5B&39=%22&40=A&41=f&42=r&43=i&44=c&45=a&46=%22&47=%2C&48=%22&49=A&50=m&51=e&52=r&53=i&54=c&55=a&56=s&57=%22&58=%2C&59=%22&60=A&61=s&62=i&63=a&64=%22&65=%2C&66=%22&67=E&68=u&69=r&70=o&71=p&72=e&73=%22&74=%5D&75=%7D 

enter image description here

+0

你使用 - JSON.stringify(數據) - 在將其添加到查詢字符串? – Dve 2013-03-06 14:29:28

+0

是的,請參閱更新。 – Xerxes 2013-03-06 14:30:54

+0

您是否嘗試過使用HttpUtility.UrlDecode() – DaveHogan 2013-03-06 14:32:49

回答

4

從手冊jQuery.param()

創建一個數組或對象的序列化表示,適用於URL查詢字符串或Ajax請求。

你傳遞的JSON.stringify返回值是一個字符串

你需要傳遞一個對象,而不是:那麼

var json = JSON.stringify(etc etc); 
var url = BriefExportPath + $.param({ "json": json }); 
location = url; 

你的服務器端代碼將需要從json查詢鍵提取數據。

+0

我也用'var oo = xx.Deserialize (json);'而不是'DeserializeObject()',所以我不必處理代碼中的數組。只要確保你的json屬性名稱匹配你的對象名稱。我沒有列出所有的屬性,只是我想要的屬性填寫。 – 2014-10-07 17:53:49

0

爲什麼不使用這個

$.ajax({ 
    url: url, 
    type: "POST", 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    complete: callback 
}); 

,而不是查詢字符串。

+2

,因爲我從服務器返回一個文件 – Xerxes 2013-03-06 14:31:59

+0

在這種情況下,爲什麼不改變contentType以匹配您要返回的文件的類型? – 2013-03-06 14:32:45

+0

@TimothyGroote - 如果文件是通過'.ajax'請求的,會有什麼幫助?什麼讓你認爲服務器端代碼發出錯誤的內容類型呢? – Quentin 2013-03-06 14:37:50

0

你的服務器要求輸入到一個可預測的變量名結束的地方,但你似乎試圖把它命名爲0一個GET變量,我們可以在ExportCsv?0=

看到你的代碼期望是ExportCsv?json=

確保您的值傳遞給正確的GET變量名

+0

它被自動分配給0。 – Xerxes 2013-03-06 14:32:44

+0

那我們至少能看到應該抓住你的GET變量值的代碼嗎? – 2013-03-06 14:33:50

0
var jObj = (JObject)JsonConvert.DeserializeObject(json);