2017-08-01 10 views
1

は、ユーザーがメインページにリダイレクトされます:リダイレクト取得した後Ajaxが成功した後、ボタンを押す方法を教えてください。 Ajax呼び出しが成功すると

$('#button_1').on('click', function() { 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.href = "/"; 
       });  
      }); 

、私は自動的にモーダルを開き、別のボタンを、クリックします。

.done(function() { 
    location.href = "/"; 
    $('#button_2').click(); // doesn't work 
}); 

.done(function() { 
    location.href = "/"; 
    setTimeout(function() 
     $('#button_2').click(); // doesn't execute 
    }, 2000); 
}); 

.done(function() { 
    location.href = "/"; 
    $(document).ready(function() { 
     // executes but user is immediately redirected to main page 
     $('#button_2').click(); 
    }); 
}); 

私もAjax呼び出しが入っている機能では、Ajaxの外で試してみましたが、同じ結果を持っていた:私はdone機能の異なる方法の内側に試してみました。

Ajaxコールの後にボタンをプログラムでクリックする方法はありますか?ブラウザが別のページにナビゲートされているため、次

location.href = "/"; 

にコードの

+0

は '成功をしてみてください:' AJAX –

+0

内の属性は '$( '#のbutton_2' です) ''/'のページにありますか? –

+0

ユーザーを別のページにリダイレクトすると、最初のページでは実行できません。第2の(リダイレクトされた)ページでそれを行う必要があります。 –

答えて

1

ありがとうございました。私は、もう少し研究し、それを行うための別の方法を見つけました:

$('#button_1').on('click', function() { 
       sessionStorage.setItem("reload", "true"); 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.reload(); 
       });  
      }); 

、メインページで:

$(document).ready(function() { 
     var reload = sessionStorage.getItem("reload"); 
     if (reload == "true") { 
      $("#button_2").click(); 
      sessionStorage.setItem("reload", false); 
     } 
    }); 
2

ラインは実行されません。

ロジックは/ページ(#button_2はそのページにあるはずです)に配置してください。

5

ターゲット(メイン)ページにそのロジックを追加する必要があります。

リダイレクトすると、現在のページはアクティブなページでなくなり、すべてのロジックが削除されます。

あなたは、あなたが原因リダイレクトにあるときを知るために、URLに何かいくつかのパラメータを追加することができます。

location.href="/?redirect=1" 

をし、そのパラメータに

+0

私が行った方法は扱いが簡単でしたが、あなたの提案に+1してください –

2

をご確認現在実行しようとしていますlocation.href = "/"以降のコードには決して到達できないため、リダイレクト後に直接コード化することはできません。リダイレクトすると、新しい状態のページが表示されます。

あなたの現在の機能はまだこのように見ることができます:あなたは私がリダイレクトにクエリパラメータを追加しました見ることができるよう

$('#button_1').on('click', function() { 
    $.ajax({ 
     method: "POST", 
     url: "/somewhere", 
     data: { 
      //code 
     } 
    }).done(function() { 
      location.href = "/?modal-open=1"; 
    });  
}); 

はそう、我々はモーダルを開くために意図してリダイレクトされた知っています。あなたのルートページ(/)については

あなたは、このようなスクリプトが必要になります。

$(document).ready(function() { 
    // check the URL for the modal-open parameter we've just added. 
    if(location.search.indexOf('modal-open=1')>=0) { 
     $('#button_2').click(); 
    } 
}); 

これは、パラメータがURLであるかどうかを確認し、クリックをトリガーします。

+0

ありがとうございました。私はそれを扱う方が簡単だったので、私の答えを使って解決しました –

1

まず、新しいページをリダイレクトすると、ページがリロードされるためDOMにアクセスできなくなります。あなたはそのためのパラメータを送ることができます。

$(document).ready(function() { 

    //after page load 

    var isButtonActive = findGetParameter("isButtonActive"); 
    if(isButtonActive){ 
     alert("button_2 activated"); 
     $('#button_2').click(); 
    } 

    $('#button_1').on('click', function() { 
     //code 
     $.ajax({ 
      method: "POST", 
      url: "/somewhere", 
      data: { 
       //code 
      } 
     }).done(function() { 
      alert("page will be reload. button_2 wil be activated"); 
      location.href = "/?isButtonActive=true"; 
     });  
    }); 

    $('#button_2').on('click', function() { 
     alert("button_2 clicked"); 
    }); 

}); 

function findGetParameter(parameterName) { 
    var result = null, 
     tmp = []; 
    location.search 
     .substr(1) 
     .split("&") 
     .forEach(function (item) { 
      tmp = item.split("="); 
      if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); 
     }); 
    return result; 
} 
関連する問題