django で ajax リクエストに対して json レスポンスを返そうとしています。Json レスポンスは、シリアル化された Python 辞書です。辞書には十分なデータが含まれていると確信していますが、クライアント側には届きません。サーバー側には、次の python ルーチンがあります。
def routine(request):
response_dict = {}
f = open("output.txt", "r")
for line in f:
line.strip('\n ')
(key, val) = line.split('\t')
if re.search("^[a-zA-Z][a-zA-Z0-9]*$", key) != None:
if re.search("^[0-9]+$", val) != None:
response_dict[key] = val
f.close()
json_response = json.dumps(response_dict)
return HttpResponse(json_response, mimetype='application/json')
クライアント側には、このjavascript + jQueryルーチンがあります(以下で編集、そのバージョンを参照):
$.postJSON('ajax/routine', '', function(data)
{
console.debug(data);
console.debug(data.result);
$("#result").html(data.result);
});
postJSON は、POST ajax リクエストを実行する jQuery プラグインです。コードは次のとおりです。
$.postJSON = function(url, data, callback) {
return jQuery.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': JSON.stringify(data),
'dataType': 'json',
'success': callback
});
};
コンソールにも "result" で識別されるタグにも出力は書き込まれません。
編集すると、200 Http ステータス コードと 124 が data.result として返されます。私がデバッグしたサーバーでは、json.dumps は問題なく動作します。
Edit2 jQuery/javascript コードを編集しました:
$.postJSON('ajax/routine', '', function(data)
{
array = {};
for(key in data)
{
array = key + " " + data[key];
}
$("#result").html(array);
});
私は Firebug の下でそれをテストし、応答はクライアントに到着しますが、1) 小さな配列 (1 要素) で出力されます 2) 応答により、Chromium 開発者ツールと Firebug の両方がクラッシュします (JSON タブを開くと、応答タブで取得します応答の一部と、「Firebug 応答サイズの制限に達しました。ここをクリックして、応答全体を新しい Firefox タブで開きます」というメッセージのみが表示されます。
ありがとう