2013-03-23 15 views
2

我想從json文件中提取數據並將其發佈到服務器端。

這種數據decleration作品:

$.post('/createDBJSON',{'name':'bar'}, 
function(data) {window.alert(data);} 

不過,我需要這樣的:

$.post('/createDBJSON',{'/assets/appconf/db.json'}, 
function(data) {window.alert(data);} 

我知道$。員額獲取數據PlainObject或字符串,但我想以某種方式發佈數據作爲json文件,因爲我的json文件非常複雜(嵌入式key-val對太多),無法像使用$ .getJSON那樣在$ .post中使用js變量(s)輕鬆解析。

爲了實現這個目標,我應該考慮另一種方法嗎?

預先感謝您。

+0

此鏈接可能有用http://stackoverflow.com/questions/2177548/load- json-into-variable – 2013-03-23 15:17:30

+0

這很奇怪。你想從服務器('db.json')中取出json,然後在'post'請求中將它推回到服務器,甚至沒有將它解析到本地對象中?看起來你應該在服務器端添加一些功能,以避免這種無用的數據傳輸。 – tcovo 2013-03-23 15:33:06

+0

我覺得我在做一些愚蠢的事情。我應該在服務器端使用JSON解析器,而不涉及客戶端。我找到了一些關於GSON解析JSON數據的文檔。你有這樣的建議,以便在Play Framework 2.1中使用它嗎? – Hako 2013-03-23 15:36:41

回答

1

我想你可能會擊中$.post()一個微妙的問題,當該數據是一個對象。它被轉換爲字符串,但不轉換爲JSON字符串 - 相反,它被用作構建application/x-www-form-urlencoded字符串的一組鍵值對。

$.post()的另一個問題是它總是發送application/x-www-form-urlencoded; charset=UTF-8的內容類型標題。這可能是服務器崩潰的原因:它期望JSON,但內容類型爲application/x-www-form-urlencoded。要解決這個問題,我們可以使用更多選項的更一般的$.ajax()

試試這個:

$.getJSON('/assets/appconf/db_trial.json', function(firstData) 
{ 
    $.ajax({ 
     type: "POST", 
     url: '/createDBJSON', 
     data: JSON.stringify(firstData), // send JSON representation 
     contentType: 'application/json; charset=utf-8', // set correct content-type header 
     success: function(secondData) {window.alert(secondData);} 
    }); 
}); 

我們也可以嘗試從未困擾到第一JSON響應轉換成一個對象,然後回一個JSON字符串的另一種方法,而不是僅僅把它作爲文本的全部時間:

$.ajax({ 
    dataType: "text", // parse response only as text 
    url: '/assets/appconf/db_trial.json', 
    success: function(jsonString) { 
     $.ajax({ 
      type: "POST", 
      url: '/createDBJSON', 
      data: jsonString, // jsonString is already a json string 
      contentType: 'application/json; charset=utf-8', // set correct content-type header 
      success: function(secondData) {window.alert(secondData);} 
     }); 
    } 
}); 

請同時試用!

但我仍然建議修復您的後端,以免數據無法通過客戶端!我認爲Play Framework 2包含用於JSON操作的Jackson,因此您只需導入正確的類並搜索互聯網即可瞭解如何使用Jackson庫讀取JSON文件。

2

你可以使用$ .getJSON這樣的:

$.getJSON('/assets/appconf/db.json', function(json) { 

    $.post('/createDBJSON',json, 
    function(data) {window.alert(data);} 

}); 
+0

它似乎在POST透視圖中工作。你知道如何在2.1中解析它嗎? JsonNode json = request()。body()。asJson(); String name = json.findPath(「style_nodes」)。getTextValue();似乎失敗了。 – Hako 2013-03-23 22:10:53

+0

問題解決了,謝謝。 – Hako 2013-03-23 22:57:14

0

原來我的內容類型不是json。它需要被指定。 Play 2.1 json body parse示例如文檔所述工作。我希望他們提供適當的客戶端調用示例,以及...

這裏是工作的Ajax調用:

$.getJSON('/assets/appconf/db_trial.json', function(json) 
{ 
    $.ajax({ 
      url:'/createDBJSON', 
      type:"POST", 
      data:JSON.stringify(json), 
      contentType:"application/json; charset=utf-8", 
      dataType:"json", 
      success: function(){ 

      } 
     }); 

});