2

通常のリンクがあります:

<a href="http://www.google.com" class="continue">Continue</a>

クリックをイベントにバインドして、次のような ajax リクエストを投稿しました。

$('.continue').click(function () {

    $.ajax({
        type: 'POST',
        url: '/url-to-post-to',
        data: mydata,
        contentType: 'application/json',
        error: function (err) {
            alert("error - " + err);
        },
        success: function () {
            return true;
        }
    });
});

私がやろうとしているのは、成功時にたどるリンクです....
つまり、エラーがない場合、ユーザーはGoogleにリダイレクトされます。

成功ハンドラを入れることができることは知っていますがwindow.location.href、可能であればこれを避けようとしていました

4

4 に答える 4

11

残念ながら (あなたの場合)、ajax は非同期です。つまり、クリック関数は ajax 呼び出しを開始し、その動作に注意を払わずに実行を続けます (したがって、最後に何も返しません)。

success 関数は後で (ajax が正常に返されたときに) 呼び出され、まったく別の関数であるため、true元のクリック関数とは関係ありません。

つまり、javascript を使用して、アンカー タグの自然な動作 (直接 google.com に移動) とその後の動作 (リダイレクト) をオーバーライドする必要があります。

$('.continue').click(function (e) {
    e.preventDefault(); // otherwise, it won't wait for the ajax response
    $link = $(this); // because '$(this)' will be out of scope in your callback

    $.ajax({
        type: 'POST',
        url: '/url-to-post-to',
        data: mydata,
        contentType: 'application/json',
        error: function (err) {
            alert("error - " + err);
        },
        success: function () {
            window.location.href = $link.attr('href');
        }
    });
});
于 2013-05-15T11:29:02.913 に答える
1

あなたはこれを試すことができます、

     $('.continue').click(function () {
   $.ajax({
    type: 'POST',
    url: '/url-to-post-to',
    data: mydata,
    contentType: 'application/json',
    error: function (err) {
        alert("error - " + err);
    },
    success: function () {

       $(location).attr('href',$(this).attr('href'));
    }
  });
  return false;
 });
于 2013-05-15T11:27:29.890 に答える