我花了一个下午的时间试图找出问题何在,最后还是无能为力,现是不抱着希望上来发贴请教。all.html:
...
<div id="left">
<a href='one.html' target="i.html">one</a>
<a href='two.html' target="i.html">two</a>
...
</div>
<div id="right">
<iframe name="i" src="xxx.html" width="100px" height="100px"></iframe>
</div>可以看到left左边是一堆a标签,点击后在right右边的iframe打开,all.html中加载了ajax.js文件。其中一个页面three.html里面也加载ajax文件,默认three.html.window.onload后打开ajax发送一次post请求返回json。
问题是点击three后,再点击one/two...则在新窗口中打开链接,而不是i中。
出现这种情况可能有两种可能:一是target改变了;二是all.html找不到i,所以默认在新窗口打开。
但,通过提取a的target依然为i,在all.html中alert(i)也能找到iframe,所以否定情况一。问题可能是情况二。
如果three不发送ajax.post则没问题,所有a标签指向i;这与返回的数据无关,即使ajax返回为空;改为ajax.get方法也无效;在php中改变content-type也没有解决问题。
这个问题存在于ie8/chrome,FF/opera则没有这样的问题,后两个浏览器是最新版本。我最后的方法是在ajax前加上parent,即parent.ajax。
当然,无任何理由在子窗口加载父窗口已有的同样js文件,但我现在很疑惑问题出在哪?!