0

次のように、post ajax呼び出しで相対URLを使用しようとしています:

現在の URL パス:

http://localhost:8000/customer/0/location/0/user/0/

別のディレクトリに変更する必要があります。

var absolute = "http://localhost:8000/customer/0/location/0/line_group/addLine/2/";//+phone_id;
var relative= "../../line_group/addLine/1"

            $.get(relative,function(data){
            //this works     
            alert(data);
            });

            $.ajax({
            type: "POST",
            url: relative,
            data: "test=test1",
            error:function(data){
            //throws error when using relative path  
            alert('error');
            },
            success:function(data){
            // works fine when using absolute path 
            alert('success');
            }
            });
            //same thing using just post        
            $.post(relative,test,function(data){
            //Error on relative path
            alert(data);
            return false;
            });

私のget呼び出しでは、絶対URLと相対URLの両方でデータが返されます。

しかし、POST 呼び出しの場合、相対 URL を使用すると、内部サーバー エラーが発生します (絶対 URL は正常に動作します)。私の見解では、テスト目的で @csrf_exempt も含めているため、CSRF とは関係ないと思います。(リクエストにhttps://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajaxを含めました)

Chrome デバッガーは、相対 URL を使用した post 呼び出しで次のエラー メッセージを表示します。

Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR) http://localhost:8000/customer/0/location/0/line_group/addLine/1

ただし、ご覧のとおり、アクセスしたい完全な URL リンクが提供されます。リンクを直接クリックすると、ページのデータが取得されます。

ビューは非常にシンプルです。

@csrf_exempt
def addNewLine(request, customer_id, location_id, phone_id,**kwargs):
      error_msg = u"No POST data sent."            
      context = {}
      return render_to_response('line_group/mytest.html', context)

POST 呼び出しで相対 URL パスが失敗する理由について、何らかの提案がありますか? 前もって感謝します..

4

1 に答える 1

1

Chrome ネットワーク セクションでは、エラーの説明をプレビューできますDEBUG=True

の最後にスラッシュがvar relative= "../../line_group/addLine/1"ないため、CommonMiddleware がリクエストをリダイレクトしている可能性があります。APPEND_SLASH = FalseURL をそのままにしておく場合は、プロジェクト設定で設定します。

于 2012-06-22T14:27:35.540 に答える