2

我想从 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 文件非常复杂(嵌入的 key-val 对太多),无法使用 $.getJSON 轻松解析为 js 变量按照记录在 $.post 中使用。

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

先感谢您。

4

3 回答 3

2

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

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

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

});
于 2013-03-23T15:34:44.257 回答
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,因此您只需要导入正确的类,并在 Internet 上搜索以了解如何使用 Jackson 库读取 JSON 文件。

于 2013-03-23T22:52:12.100 回答
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(){

          }
        });

});
于 2013-03-23T22:55:29.570 回答