Ajax调用控制器,成功重定向到另一个页面,显示数据从Ajax调用返回

时间:2017-01-17 17:23:51

标签: javascript jquery ajax

我想在ActionMethod内调用controller,如果数据已成功返回,我想将用户重定向到新页面并在div内显示数据在新页面上!显然,当返回数据时,div仍未加载,因此我无法显示数据。

还有其他办法吗?

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 个答案:

答案 0 :(得分:0)

这样做:

public class MyService extends Service {

@Override
public void onCreate() {
    super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {


    /* 1. *//*ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

   // This schedule a runnable task every 2 minutes
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        public void run() {

        }
    }, 0, 10000, TimeUnit.SECONDS);*/


    /*  2. *//*final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            Toast.makeText(MyService.this, "suiubsibddubsuidv", Toast.LENGTH_LONG).show();
            handler.postDelayed(this, 10000); //now is every 2 minutes
        }
    }, 10000);*/


    return START_STICKY;

}

@Override
public IBinder onBind(Intent intent) {
    return null;
}

} 

答案 1 :(得分:0)

是的,Chetan和Chris是对的。在页面重新加载时,您将丢失Ajax返回的所有数据。我通过在Session中存储请求参数并从新页面再次调用它来解决这个问题。