从json文件中提取数据,以便在Jquery中使用。$ post

时间:2013-03-23 15:09:57

标签: jquery json post playframework-2.0

我想从json文件中提取数据,然后将其发布到服务器端。

这种数据解除工作:

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

但是我需要这样的东西:

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

我知道$ .post将数据作为PlainObject或String获取,但我想以某种方式将数据发布为json文件,因为我的json文件非常复杂(嵌入式键值对太多),可以轻松地解析为js变量$ .getJSON用于$ .post中的文件。

为了实现这个目的,我还应该考虑另一种方法吗?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以像这样使用$ .getJSON:

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

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

});

答案 1 :(得分: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 :(得分:1)

原来我的内容类型不是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(){

          }
        });

});