4

以下のようなajax呼び出しを介して、Djangoビュー呼び出しからJSON応答を返そうとしています:

var tab = 'test';
var response = $.ajax({
    url: "/" + tab + "/"
}).responseText;

alert(response);

これが私のDjangoビューです:

if request.is_ajax() == True:
    req = {}
    req['html'] = '<b>This is a test</b>'
    response = simplejson.dumps(req)
    print response
    return HttpResponse(response, mimetype="application/json")
else:
    return render_to_response("ajax/pingpong.html", {'ajax': ajax})

奇妙な理由で、アラート ボックスは空白です (ただし、未定義とは表示されません)。興味深いことに、$.post と $.getJSON はまったく同じ URL で正常に機能します。また、予想される JSON 出力がコンソールに表示されます。どんな助けでも大歓迎です!

4

5 に答える 5

2

dataTypeパラメータをに設定していないためjson、success 関数から json オブジェクトを取得する必要があります。これを試してください。

var tab = 'test';
$.ajax({
    url: "/" + tab + "/",
    dataType: "json",
    success: function(json){
        alert(json);
    }        
});
于 2009-08-26T12:07:12.540 に答える
1

代わりにこれを試してください:

var tab = 'test';
var response = $.ajax({
    url: "/" + tab + "/",
    success: function(data, textStatus) { alert(data); }
});
于 2009-08-26T12:29:30.610 に答える
1

私が間違っていない限り、返さresponseTextれるものの属性ではありません。$.ajax()次のようなことをしなければならないと思います:

$.ajax({
  url: "/test",
  dataType: "json",
  success: function(data) {
    // use data
  }
});

パラメータによりdataType、成功コールバックに生成されるデータは通常の JS オブジェクトです。を指定しない場合はdataType、サーバーが返す生のコンテンツを含む文字列を取得します。

于 2009-08-26T12:11:59.053 に答える
0

私は同じ問題を抱えていますが、特定の環境下でのみ発生します。あなたの問題が同じかどうか疑問に思っています。私の環境:

  1. Django の内部 Web サーバーの実行 (./manage.py runserver 0.0.0.0:8080)
  2. Google Chrome (v4.1.249.1025) で自分の Web サイトを表示しています。

このような状況では、次の jQuery コードは、約半分の時間で data = null, status = "success" になります。残りの半分の時間は、データに対して有効なオブジェクトを返します。

$.ajax({
   type:"POST",
   url:"response/"+q.id+"/",
   cache:false,
   dataType:"json",
   data:{response:$(this).val()},
   success:function(data, status) {
     alert(data+","+status);
   }, 
   error:function() {
     $(".main_container").text("Error. Please check your internet connection.");
   } 
});
于 2010-03-10T10:11:45.310 に答える