【发布时间】:2009-03-11 20:55:22
【问题描述】:
我在使用 jquery(ajax、load、get、post)进行异步调用时遇到问题。当我等待远程站点回答时,我无法浏览我的链接,直到远程网站回答或超时。
如果我点击指向外部网站(例如 google)的链接,页面会立即切换。我在本地 IIS、windows 2008 IIS7 和 VS2008 自带的 web 服务器上都试过了。
要重现复制以下代码并将代理页面更改为您自己的页面并使其等待很长时间(或者您可能想尝试以下 Web 服务,因为它需要很长时间才能回答:http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=Inuvik&CountryName=Canada)。您需要使用代理页面,因为您无法进行远程 ajax 调用)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
//GetRemotePage();
AjaxRemotePage();
//LoadRemotePage();
//PostRemotePage();
});
function LoadRemotePage() {
$("#RemoteDetail").append("Calling delayed page<br />");
$("#RemoteDetail").load("AjaxProxy.aspx?t/AjaxDelay.aspx?d=10");
}
function AjaxRemotePage() {
$("#RemoteDetail").append("Calling delayed page<br />");
$.ajax({
url: "AjaxProxy.aspx?/AjaxDelay.aspx?d=10",
async: true,
cache: false,
global: false,
success: function(html) {
$("#RemoteDetail").append("AjaxRemotePage<br />");
$("#RemoteDetail").append(html);
}
});
};
function PostRemotePage() {
$("#RemoteDetail").append("Calling delayed page<br />");
$.post("AjaxProxy.aspx?/AjaxDelay.aspx?d=10", {}, function(xml) {
$("#RemoteDetail").append("---In Ajax Call<br />");
});
};
function GetRemotePage() {
$("#RemoteDetail").append("Calling delayed page<br />");
$.get("AjaxProxy.aspx?/AjaxDelay.aspx?d=10", {}, function(xml) {
$("#RemoteDetail").append("---In Ajax Call<br />");
});
}
</script>
</head>
<body>
<div>
<a href="http://www.google.com">go google</a><br />
<a href="/AjaxTest.htm">go this page</a><br />
<a href="/">go home page</a><br />
</div>
<div id="RemoteDetail">
</div>
</body>
</html>
AjaxProxy.aspx => 是一个代理页面,用于返回远程页面的响应 AjaxDelay.aspx => 是模拟的远程服务/页面,增加了 10 秒 (d=10) 的延迟来模拟非常慢的远程站点/服务
编辑:添加了 AjaxProxy 内容和 AjaxDelay 内容(两个页面都在 asp.net 2.0 中,aspx 页面中没有任何内容)
AjaxProxy
>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Request.QueryString.Count = 0 Then Response.Write(" ") : Exit Sub
Dim Url As String = HttpUtility.UrlDecode(Request.QueryString().ToString)
Dim req As HttpWebRequest = WebRequest.Create(Url)
Dim res As HttpWebResponse = req.GetResponse
Dim sreader As StreamReader = New StreamReader(res.GetResponseStream)
Dim myhtml As String = sreader.ReadToEnd
sreader.Close()
res.Close()
If Url.EndsWith(".xml") Then
Response.AddHeader("Content-type", "application/xml")
End If
Response.Write(myhtml)
End Sub
Ajax延迟
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Del As Integer = 2
If String.IsNullOrEmpty(Request("d")) = False Then
Integer.TryParse(Request("d"), Del)
If Del = 0 Then Del = 2
End If
Del = Del * 1000
Threading.Thread.Sleep(Del)
Response.Write(String.Format("Delayed for {0} seconds", Del / 1000))
End Sub
【问题讨论】:
-
快速问题,请随时编辑您的问题并回复:此错误仅在 IE 中出现还是在所有浏览器中出现?
标签: jquery