2

我们有以下情况:

default.aspx我们有一个链接:

<a href="javascript:doPost()">test</a>.

和JS代码:

function doPost() {
    $.post('AnHttpHandlerPage.aspx',"{some_data:...}", function(data) {
        if(data.indexOf("http://")==0)
            window.open(data);
        else{
            var win=window.open();
            with(win.document) {
                open();
                write(data); //-> how to execute this HTML code? The code also includes references to other js files.
                close();
            }  
        }
    }).error(function(msg){document.write(msg.responseText);});
}

回调可以首先是一个 url 地址必须执行的第二个 html 代码。选项 1 适合,但在选项 2 中,将打开一个新窗口,其中代码已编写但未执行。

很清楚,因为它发生在流中,所以无法执行。那么问题来了,你怎么能解决它?也许 arefresh()或类似的?

由于客户的要求,工作流程是不能改变的,所以必须在内部解决doPost()

编辑

案例 2 中的响应是这样的 HTML。这部分应该执行

<HTML><HEAD>
<SCRIPT type=text/javascript src="http://code.jquery.com/jquery-latest.js">
</SCRIPT>
<SCRIPT type=text/javascript>                      
$(document).ready(function() {
do_something... 
});                          
</SCRIPT>
</HEAD>
<BODY>
<FORM>...</FORM>
</BODY>
</HTML>

请帮忙。谢谢。

4

1 回答 1

0

在您的 JS 代码中,它应该是这样的:

function doPost() {
    $.post('AnHttpHandlerPage.aspx',"{some_data:...}", function(data) {
        //if(data.indexOf("http://")==0)
              if (data.type!="url")   //i will add a data type to my returned json so i can differentiate if its url or html to show on page.
            window.open(); // I dont know why this is there. You should
        else{
            var win=window.open(data.url); //This data.url should spit out the whole page you want in new window. If its external it would be fine. if its internal maybe you can have an Action on one of your controllers that spit it with head body js css etc.
        /*  with(win.document) {
                open();
                write(data); //-> how to execute this HTML code? The code also includes references to other js files.
                close(); */ // No need to write data to new window when its all html to be rendered by browser. Why is this a requirement.
            }  
        }
    }).error(function(msg){document.write(msg.responseText);});
}

整体逻辑是这样的

  1. 你在 doPost 上进行 ajax 调用
  2. 查看返回的数据是 url 类型还是需要在新窗口中打开的任何内容
  3. 如果它是 url 类型,它将有一个 url(检查它是否不为 null 或为空,甚至是有效的 url),然后使用该 url 打开一个新窗口。阅读W3C window.open获取参数
  4. 如果您出于某种原因想要打开和关闭它,只需保留窗口句柄即可,但您可以在该新窗口的 dom 就绪事件上执行此操作,否则您可能最终在其 dom 完全加载之前关闭它。(其他人可能有更好的方法)
  5. 如果它不是 url 类型,那么你在这个页面上做你通常的事情。

如果这没有意义,让我们讨论。

于 2013-02-02T14:31:45.770 回答