坦白说,我认为这种方法基本上被设计打破了。你不应该在那个地方做出决定。例如,ajax响应只能用信号通知应该加载整个新页面,然后在对新URL的第二(非ajax)请求上生成新内容。
如果你被迫采取你已经去的方式,并且提供的响应内容不是很大,你可以尝试Javascript-URI。基本上,javascript:“string”形式的URI将加载一个新的页面,该字符串是源代码。所以,如果响应已经是一个字符串,只需分配javascript:响应window.location.href就足够了。也许你必须事先做一些逃脱。而我不知道,这种方法是如何跨浏览器兼容的。
load
也是可能的。
其中的一个变体是构建不带变量名称的URL,但使用实际的字符串数据。喜欢
function source2url(src) {
// make valid javascript string from source text
var esc1 = src
.replace(/\\/g, '\\\\')
.replace(/\'/g, '\\\'')
.replace(/\x0A/g, '\\x0A')
.replace(/\x0D/g, '\\x0D');
// make valid url from that
return "javascript:'" + encodeURIComponent(esc1) + "'";
}
window.location.href = source2url(response);
这当然会生成相当大的URI。并且您在地址栏中始终有Javascript-URI。
更新
类似的方法是在数据URI中使用base64编码。 Wikipedia entry解释了它的工作原理,包括一个javascript示例。但是,你不得不base64-encode的内容不知何故。 (注意:你可以使用带或不带base64编码的数据URI,你必须看看什么给你的特定内容更短的URI。)