我想在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");
})
},
这两种功能都有竞争条件,有时它们会相互冲突,但即使我将它们分开,第一个问题仍然存在。
答案 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
中存储请求参数并从新页面再次调用它来解决这个问题。