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 ファイルが非常に複雑 (埋め込まれたキーと値のペアが多すぎる) であるため、$.getJSON を使用して js 変数に簡単に解析できないため、何とかデータを json ファイルとして投稿したいと考えています。文書化されているように $.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

私のコンテンツタイプはjsonではなかったことがわかりました。指定する必要があります。Play 2.1 jsonbodyparseの例は文書化されているとおりに機能します。適切なクライアント呼び出しの例も提供されることを願っています...

動作する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 に答える
1

$.post()データがオブジェクトの場合、微妙な問題が発生する可能性があると思います。文字列に変換されますが、JSON 文字列には変換されません。むしろ、文字列を作成するためのキーと値のペアのセットとして使用されapplication/x-www-form-urlencodedます。

のもう 1 つの問題$.post()は、常に の content-type ヘッダーを送信することです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 ファイルを読み取る方法を学習するだけです。

于 2013-03-23T22:52:12.100 に答える