0

こんにちは、cherrypy をバックエンドとして使用し、fanytree をフロントエンドとして使用するのは初めてです。

コードの私のfanytree側は次のとおりです。

source: {
   url : '/test_data'
},

チェリーピー側では、test_dataという関数を実装しました

@cherrypy.expose
@cherrypy.tools.json_out()
def test_data(self, **kwargs):
  cherrypy.response.headers["Content-Type"] = "application/json"
  return '[ {"title":"abc", "folder": true, "key": "1", "children":[ {"title":"b","key":"2"}] }]'

だから私はリクエストがcherrypyに来るのを見る

'GET /test_data?_=some number...

ブラウザに戻りオブジェクトが表示されますが、チェックに失敗しました:

if (typeof data === "string") {
      $.error("Ajax request returned a string (did you get the JSON dataType wrong?).");
 }

content-type を json にする必要があることをどこかで読みましたが、既に持っています。私は何が欠けていますか?

4

2 に答える 2

1

コンテンツ タイプは問題ありませんが、返される文字列は有効な json ではありません (たとえば、キーは二重引用符で囲む必要があります)。データを辞書のリストとして準備し、「json.dumps()」を使用して JSON に変換することをお勧めします。(おそらく json_out ツールも同じことを行いますが、それでも文字列ではなく辞書のリストを返す必要があると思います。)

于 2014-09-18T19:18:55.090 に答える
1

CherryPy JSON 出力ツール はcherrypy.tools.json_out、MIME を処理し、データを JSON 文字列に変換します。したがって、それを使用する場合、メソッドは次のようになります。

@cherrypy.expose
@cherrypy.tools.json_out()
def test_data(self, **kwargs):
  return [{
    "title"    : "abc", 
    "folder"   : True, 
    "key"      : 1, 
    "children" : [{"title": "b", "key": 2}] 
  }]

それ以外の場合は、自分でやりたい場合は次のようになります。

import json

@cherrypy.expose
def test_data(self, **kwargs):
  cherrypy.response.headers["Content-Type"] = "application/json"
  return json.dumps([{
    "title"    : "abc", 
    "folder"   : True, 
    "key"      : 1, 
    "children" : [{"title": "b", "key": 2}] 
  }])

次に、CherryPy アプリを再起動したことを確認し、Web 開発者ツールまたは FireBug ネットワーク タブを調べて、応答ヘッダーとコンテンツを確認します。

于 2014-09-19T10:19:52.680 に答える