使用 jQuery 更新经典 ASP DIV 而无需重新加载网页
Update Classic ASP DIV without reloading the webpage using jQuery
这应该非常简单,所以,要么是我想多了,要么让它变得比它应该的更复杂。
我想更新 DIV 而无需重新加载网页。
Canvas.asp 上的表格查询数据库和 return GPS 设备的坐标。坐标每分钟更新一次,希望脚本能够 return 最新坐标而无需刷新页面。坐标附加到单独的 XML 文件。
我写了这个;
<script type="text/javascript">
$(document).ready(function() {
$("#map").load('canvas.asp');
var auto_refresh = setInterval(function() {
$("#map").load('canvas.asp?std=<%=session("7digit")%>&submit=Search&execute=1');
}, 60000);
$.ajaxSetup({ cache: false });
});
</script>
div待重新加载;
<div id="map"></div>
脚本 return 因复制 header 和内容而出错,60 秒后地图 DIV 无处可见...完全消失了!坐标每 60 秒附加到 XML 文件,即使在错误发生后也是如此。
我做错了什么?
看起来你总是返回你的 canvas.asp
页面的完整结果,这将永远是一个完整的 HTML 文档,它不会与你的 <div>
.
这里的问题是如何处理传回部分内容,这归结为如何构建 ASP 页面。这是我经常用于此类事情的基本模板。
<%
Option Explicit
Dim action, def_action
Const BASE_ERROR_VAL = 1000
Const DISPLAY_PAGE = 0
Const DISPLAY_CANVAS_CONTENT = 1
'Without this the page does nothing, this is the gateway to your page.
Call init()
'First code that get's run when page is requested
Sub init()
'Defaults
def_action = DISPLAY_PAGE
'Process query string
action = Request.QueryString("a") & ""
If Len(action) > 0 and Isnumeric(action) then action = CInt(action) Else action = def_action
Select Case action
Case DISPLAY_PAGE
Call load_page()
Case DISPLAY_CANVAS_CONTENT
Call load_canvas()
Case Else
'As we have a default this should NEVER happen, but always worth covering your bases.
Call Err.Raise(vbObjectError + BASE_ERROR_VAL + 1, "canvas.asp", "Action required")
End Select
End Sub
Sub load_page()
>%
<html>
<head>
...
</head>
<body>
<% Call load_canvas() %>
</body>
</html>
<%
End Sub
Sub load_canvas()
%>
<canvas>
...
</canvas>
<%
End Sub
%>
这纯粹是基本框架,旨在让您了解如何处理它,例如只调用 canvas 部分HTML 你会使用类似
canvas.asp?std=<%=session("7digit")%>&a=1
并且根本不通过 &a
(因为 DISPLAY_PAGE
是默认值) 或通过
canvas.asp?std=<%=session("7digit")%>&a=0
显示整个HTML。
您可能还注意到我包括了
<% Call load_canvas() %>
在 load_page()
过程中,这仅适用于您可能希望 canvas 的内容也在完整通道上呈现然后稍后通过使用 a=1
例如。
虽然@Lankymart 提供的答案演示了所需的页面模板和正确的代码布局,从而实现了更大的灵活性,但答案是一个简单的 Ajax 函数。
setInterval(ajaxRequest, 15000);
function ajaxRequest() {
$.ajax({
type: 'GET',
url: 'xmlUpdateScript.asp',
data: {
7digit: "<%=session("7digit")%>"
}
});
}
Ajax 请求执行 'xmlUpdateScript.asp' 和 returns 下一组坐标,这些坐标位于 XML 文档中并且可以渲染到地图。
这应该非常简单,所以,要么是我想多了,要么让它变得比它应该的更复杂。
我想更新 DIV 而无需重新加载网页。
Canvas.asp 上的表格查询数据库和 return GPS 设备的坐标。坐标每分钟更新一次,希望脚本能够 return 最新坐标而无需刷新页面。坐标附加到单独的 XML 文件。
我写了这个;
<script type="text/javascript">
$(document).ready(function() {
$("#map").load('canvas.asp');
var auto_refresh = setInterval(function() {
$("#map").load('canvas.asp?std=<%=session("7digit")%>&submit=Search&execute=1');
}, 60000);
$.ajaxSetup({ cache: false });
});
</script>
div待重新加载;
<div id="map"></div>
脚本 return 因复制 header 和内容而出错,60 秒后地图 DIV 无处可见...完全消失了!坐标每 60 秒附加到 XML 文件,即使在错误发生后也是如此。
我做错了什么?
看起来你总是返回你的 canvas.asp
页面的完整结果,这将永远是一个完整的 HTML 文档,它不会与你的 <div>
.
这里的问题是如何处理传回部分内容,这归结为如何构建 ASP 页面。这是我经常用于此类事情的基本模板。
<%
Option Explicit
Dim action, def_action
Const BASE_ERROR_VAL = 1000
Const DISPLAY_PAGE = 0
Const DISPLAY_CANVAS_CONTENT = 1
'Without this the page does nothing, this is the gateway to your page.
Call init()
'First code that get's run when page is requested
Sub init()
'Defaults
def_action = DISPLAY_PAGE
'Process query string
action = Request.QueryString("a") & ""
If Len(action) > 0 and Isnumeric(action) then action = CInt(action) Else action = def_action
Select Case action
Case DISPLAY_PAGE
Call load_page()
Case DISPLAY_CANVAS_CONTENT
Call load_canvas()
Case Else
'As we have a default this should NEVER happen, but always worth covering your bases.
Call Err.Raise(vbObjectError + BASE_ERROR_VAL + 1, "canvas.asp", "Action required")
End Select
End Sub
Sub load_page()
>%
<html>
<head>
...
</head>
<body>
<% Call load_canvas() %>
</body>
</html>
<%
End Sub
Sub load_canvas()
%>
<canvas>
...
</canvas>
<%
End Sub
%>
这纯粹是基本框架,旨在让您了解如何处理它,例如只调用 canvas 部分HTML 你会使用类似
canvas.asp?std=<%=session("7digit")%>&a=1
并且根本不通过 &a
(因为 DISPLAY_PAGE
是默认值) 或通过
canvas.asp?std=<%=session("7digit")%>&a=0
显示整个HTML。
您可能还注意到我包括了
<% Call load_canvas() %>
在 load_page()
过程中,这仅适用于您可能希望 canvas 的内容也在完整通道上呈现然后稍后通过使用 a=1
例如。
虽然@Lankymart 提供的答案演示了所需的页面模板和正确的代码布局,从而实现了更大的灵活性,但答案是一个简单的 Ajax 函数。
setInterval(ajaxRequest, 15000);
function ajaxRequest() {
$.ajax({
type: 'GET',
url: 'xmlUpdateScript.asp',
data: {
7digit: "<%=session("7digit")%>"
}
});
}
Ajax 请求执行 'xmlUpdateScript.asp' 和 returns 下一组坐标,这些坐标位于 XML 文档中并且可以渲染到地图。