为了完成入口点页面的初始化,我需要一些只能通过客户端JavaScript通过第三方获取的数据。因此,我需要提供某种临时页面,它将在目标页面呈现之前运行JavaScript代码。我怎么能做到这一点?
我的服务器端代码 MyPage.aspx.vb 可能如下所示:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
...
...
// Read data from DB which gets written via client-side
// JavaScript interacting with web service
End Sub
答案 0 :(得分:1)
创建目标网页的两个不同页面,这里是 MyPage.aspx ,正如您自己所提到的,这是一个像Temp.aspx
这样的临时页面。在会话范围中使用标志检查客户端任务是否已完成。像:
会话[ “AjaxCallIsDone”]
在您的 MyPage Page_Load 方法中,检查是否为真:
If(Session["AjaxCallIsDone"] == null ||
!(Boolean)Session["AjaxCallIsDone"])
Response.Redirect ("Temp.aspx");
好的,如果你的ajax调用尚未完成,现在它会进入临时页面。
使用jQuery或原始javascript,在临时页面中创建ajax调用:
request = $.ajax({
url: "third-party-server-url",
type: "POST",//or may be GET
data: yourdata
});
request.done(function (response, textStatus, jqXHR){
//your client-side task is done
});
创建Handler
或Generic Handler
让客户端通知服务器有关ajax调用并设置AjaxCallIsDone
标志,在处理程序方法中执行此操作;
Session["AjaxCallIsDone"] = true;
然后在你的请求回调中创建另一个调用Handler
的ajax调用,然后在handlerRequest回调函数中执行你的重定向:
request = $.ajax({
url: "third-party-server-url",
type: "POST",//or may be GET
data: yourdata
});
request.done(function (response, textStatus, jqXHR){
//your client-side task is done
var handlerRequest = $.ajax({
url: "your-handler-url",
type: "GET"
});
handlerRequest.done(function (response, textStatus, jqXHR){
document.location="MyPage.aspx";
});
});
现在一切都已完成。
答案 1 :(得分:0)
到目前为止,您所获得的更多细节/示例代码将会很好。
如果您使用的是jQuery,那么您可以使用getScript方法......
$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
console.log( data ); // Data returned
console.log( textStatus ); // Success
console.log( jqxhr.status ); // 200
console.log( "Load was performed." );
//now do what you need to do
});
http://api.jquery.com/jquery.getscript/
希望有所帮助。
答案 2 :(得分:0)
我建议使用jQuery AJAX而不是 Temp.aspx ,
第1步。通过客户端JavaScript从第三方获取数据。
第2步。使用jQuery AJAX,从您的数据库中获取数据,该数据通过客户端&渲染它。