2017-01-17 15 views
0

controllerの中のActionMethodを呼び出そうとしています。データが正常に返された場合は、新しいページのdivにデータを表示してください!明らかにデータが返されると、divはまだ読み込まれていないので、データを表示することができません。コントローラへのAjax呼び出し、別のページへのリダイレクトAjaxからの表示データの返信

これ以外の方法はありますか?

test1: function() {   
    var type = $("#type1").val();   

    $.ajax({ 
     url: '/testcontroller/method1', 
     type: "POST", 
     data: { type: type } 
    }) 
    .always(function() { 

    }) 
    .done(function (data) { 
     console.log("finished"); 
     xxx.xxxxxx.test2(); 
    }) 
    .fail(function (data) { 
     console.log("failed"); 
    }) 
}, 
test2: function() { 
    var type = $("#type1").val();   

    var vm = 
    { 
     type: type 
    } 

    $.ajax({ 
     url: '/testcontroller/method2', 
     type: "POST", 
     data: { request:vm } 
    }) 
    .always(function() { 
     console.log("always"); 
    }) 
    .done(function (data) { 
     console.log("done"); 
     window.location.replace("/testpage"); 
     jQuery(window).load(function() {     
      $("#testdiv").replaceWith(data); 
     }); 
    }) 
    .fail(function (data) { 
     console.log("failed"); 
    }) 
}, 

また、両方の機能には競合状態があり、時にはそれらが互いに競合することもありますが、それらを分けても最初の質問が残ります。

+2

新しいページに移動すると、すべてのjとデータを含む古いページはなくなります。ローカルストレージやクッキーのいずれかにajaxの結果を "保存"するか、サーバーに送り返して、サーバーからブラウザに送り返さなければなりません。 –

+1

データを気にすることなく、method1が成功を返した後に新しい場所にリダイレクトする必要があります。また、新しいページがレンダリングされるときには、model2のデータをモデルの一部として取得するか、新しいページからの別のajax呼び出しによってデータを取得する必要があります。 –

答えて

0

をはい、チェタンとクリスは正しかったです。ページリロード時に返されるデータはすべてAjaxです。私はSessionにリクエストパラメータを格納してこの問題を回避し、新しいページから再度呼び出しました。

0

は、この操作を行います。

// page 1 
<form action="/testpage" method="POST" id="myForm"> 
    <input type="hidden" name="old_data" id="old_data"> 
</form> 

<script> 

.done(function (data) { 
    console.log("done"); 

    $('#old_data').val(data); 
    $('#myForm').submit(); 
}) 

</script> 

// testpage 
if(isset($_POST['old_data'])) { 
    echo '<div id="testdiv">'.$_POST['old_data'].'</div>'; 
} 
関連する問題