T-Bull..
28
坦率地说,我认为这种方法基本上被设计破坏了.你不应该在那个地方做出那个决定.例如,ajax响应只能表示应该加载整个新页面,然后在对新URL的第二个(非ajax)请求上生成新内容.
如果你被迫采取你已经采取的方式,并且如果响应内容不是很大,你可以试试Javascript-URIs.基本上,形式的URI javascript:"string"将加载一个新页面,该字符串是该源代码的源代码.所以,如果response已经是一个字符串,只需分配javascript:response就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.
UPDATE
类似的方法是在数据URI中使用base64编码.在维基百科条目解释它是如何工作的,包括一个javascript例子.但是,您必须以某种方式对内容进行base64编码.(注意:您可以使用带或不带base64编码的数据URI.您必须查看为您的特定内容提供更短URI的内容.)