【问题标题】:Avoid ajax redirection避免ajax重定向
【发布时间】:2013-03-21 13:25:34
【问题描述】:

感谢您抽出宝贵时间帮助我。

尽管我肯定不会是第一个遇到这个问题的人,但到目前为止我找不到任何好的答案。

假设我有两个 ASP(经典)页面。

Target1.asp 使用 response.redirect(url)

重定向到 Target2.asp

现在,我必须使用异步方法获取 Target1.asp,您可能已经发现我正在使用 AJAX 来执行此操作。

问题是当我使用 $.ajax('method':'GET', [...]) 或只是 $.get('Target1.asp') em> 并让“完成”回调用响应内容填充 div,它将整个页面重定向到 Target2.asp 而不是填充 div。

原因很简单:这个div里面确实是Target1.asp的内容。浏览器仍然需要重定向,因为 div 根本不像 iframe,所以整个页面都会被重定向。

我几乎可以肯定您无法直接从 javascript (?) 控制重定向。

有没有办法在不使用 iframe 的情况下处理这个问题?

这就是我想要做的: 使用 ajax 的 GET 方法请求 Target1.asp,处理重定向(或类似的东西),以便 ajax 请求 Target2.asp,然后用最终结果填充 div。

谢谢。

早期编辑:如果您需要一个编码示例,我可以编写一个。

【问题讨论】:

  • 您是否尝试运行一个 asp 页面并将其输出包含在另一个页面中?
  • 不,您可以简单地使用“包含”来执行此操作。我必须避免从 ajax "GET" 接收 302 重定向标头,以便浏览器不会重定向整个页面,

标签: jquery ajax redirect asp-classic


【解决方案1】:

是的,

将 response.redirect(url) 替换为 server.execute(url)server.transfer(URL)
这将控制服务器上的导航,并且不会让浏览器重定向。
Here are the differences(在 .NET 中,但它是同一个 IIS 对象,因此经典 ASP 也是如此)

HTH,

埃里克

【讨论】:

  • 这很快......而且工作!我从来没有想过实际上改变服务器端而不是客户端的东西。谢谢你的链接,它真的很有用。
  • 我们的名字相同,我们 Eriks 需要团结在一起:p
【解决方案2】:

您应该注意在问题标题中注明您正在使用 jQuery。虽然,是的,您正在调用 Ajax 方法,但您并没有手动执行它,而是依赖于您正在使用的库可能显式的功能。

简短的回答是,不,您可能无法阻止重定向透明地发生,因为这通常由浏览器本身自动完成。更长的答案是您可能应该尝试做一些事情来检查您从 ajax 响应返回的数据,看看它是否符合您的预期。当然,这可能非常依赖于您是否有任何机制来处理您返回的数据,或者您是否可以控制服务器端响应。

以下有关 stackoverflow 的文章更详细:

How to prevent ajax requests to follow redirects using jQuery

【讨论】:

  • 这也是完全正确的。文章很有意思,谢谢分享!尽管 Rico 已经为我的问题找到了一个简短而快速的解决方案,但了解这些问题将非常有用。 +1
【解决方案3】:

您有一个满意的答案,但您可能还想尝试一下

myurl = "http://(a full external url)" 
set xmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0") 
xmlhttp.open "GET", myurl, false 
xmlhttp.send "" 
Response.write xmlhttp.responseText 
set xmlhttp = nothing 

这就是我所说的运行一个asp页面并包含输出的意思,这与包含文件语句略有不同

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多