3

サーバーへのjquery投稿後に別のページにリダイレクトすることは可能ですか? ユーザーがログインしたら、json レスポンスを返すか、別のページにリダイレクトしたいと考えています。サーバーからのログ ステートメントを確認できるので、正しいビュー callable が呼び出されていることがわかります。

ここに私のjqueryの投稿があります:

function postToServer(url, params) {
    $.ajax({
        type: 'POST',
        url: url,
        data: JSON.stringify(params),
        contentType: 'application/json; charset=utf-8',
        statusCode: {
            200: function (data, textStatus, jqXHR) {
                return data;
            },
            201: function (data, textStatus, jqXHR) {
                return data;
            },
            400: function(data, textStatus, jqXHR) {
                return data;
            }
        }
    });
}

それはかなり基本的で、うまく機能しているようです。json を返すたびに、応答が正しく処理されます。

ここに私の見解があります:

#LOGIN
class LoginView(object):
    def __init__(self, request):
        self.request = request
        self.ctx = core.context()

    @view_config(route_name="login", request_method='GET')
    def get(self):
        template = "project:templates/login/login.mak"
        context = {}
        return render_to_response(template, context, request=self.request)

    @view_config(route_name="login", request_method='POST')
    def post(self):
        url = self.request.route_url('dashboard')
        print 'url: ' + url        
        #log user in and get credentials

        json = getJsonCredentialsObject()
        return Response('json', json)

#DASHBOARD
class DashboardView(object):
    def __init__(self, request):
        self.request = request
        self.ctx = core.context()

    @view_config(route_name="dashboard", request_method='GET')
    def get(self):
        print "in dashboard"
        template = "project:templates/dashboard/dashboard.mak"
        session = self.request.session
        context = {}
        return render_to_response(template, context, request=self.request)

Login クラスの post メソッドでインタラクションを処理したいのですが、"return HTTPFound(location=self.request.route_url('/dashboard'))" を使用してここにリダイレクトしようとしても、何も起こりません。request.json_body オブジェクトをリクエストから取得するのにも問題があります (null です) が、それは別の問題です。助けてくれてありがとう。

4

2 に答える 2

3

AJAX を使用している場合、ブラウザは表示するページを要求していません。

リダイレクトは、クライアントが応答を取得する別の URL を指しているだけであり、AJAX でそれを行う場合、ブラウザは単に新しい場所から AJAX 応答を取得します。ページを読み込んでいた場合、リダイレクトは、代わりにデータが単に別の場所から読み込まれることを意味します。

つまり、AJAX 要求への応答によって、ブラウザーのページが変更されることはありません。代わりに JavaScript コードでそれを行う必要があります。POST ハンドラーから URL を返し、 を使用しますwindow.location = newurl

于 2013-01-15T15:23:47.027 に答える
2

あなたが望むものを達成するために、ピラミッドを返すことはできないと思います ajax呼び出しにリダイレクトします。

ステータスとリダイレクト URL を含む json データを返す

次に、フロントエンドで、成功時にユーザーをリダイレクトできます

window.location = http://redirecturlhere

于 2013-01-15T15:16:45.010 に答える