window.open() 第二次打开同一个页面,后台代码不执行

时间:2022-02-11 14:17:37
目的是实现一个购物车的功能
 一共有这几个文件:order.cs(商品实体)ordersummary.cs(所有订单的总结)default.aspx(显示商品)newwin.aspx(要打开的文件,显示购买的商品)jsshop.js(提供window.open方法)test.asmx文件(修改保存session)
   要的功能是 在default.aspx中点击购买后,通过调用jsshop.js------test.asmx--->jsshop.js(通过他的方法window.open)打开newwin.aspx(并保持开启);同时购买其他商品时,通过window.open打开的newwin.aspx同时更新。代码完成后,可以实现功能。奇怪的是,晚上再打开时newwin.aspx却不能同时更新,调试发现newwin.aspx的后台文件不再执行!
default.aspx

  <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
         <asp:ScriptReference Path="~/jsshop.js" />
        </Scripts>
        <Services>
          <asp:ServiceReference Path="~/test.asmx" />
        </Services>
        </asp:ScriptManager>
        <br />
         <asp:GridView ID="GridView1" runat="server" PageSize="5" AllowPaging="True" 
            onpageindexchanging="GridView1_PageIndexChanging" 
            AutoGenerateColumns="False" 
            DataKeyNames="ProductID">
            <Columns>
                <asp:TemplateField HeaderText="操作">
                  <ItemTemplate>
                    <input id="btn<%#Eval("ProductID") %>" name='<%#Eval("ProductID") %>' type="button" value="购买" onclick="ordercar(this.name)" />
                  </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="商品ID">
                   <ItemTemplate>
                     
                     <asp:Label ID="lblid" runat="server" Text='<%#Eval("ProductID") %>' ></asp:Label>
                   </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="商品Name">
                  <ItemTemplate>
                  <div id="name<%#Eval("ProductID") %>"><%#getsubstring(Eval("ProductName") )%></div>
                   
                  </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="商品单价">
                  <ItemTemplate>
                  <div id="price<%#Eval("ProductID") %>"><%#Eval("Price") %></div>
                 
                  </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            
        </asp:GridView>
          
    </div>
    </form>

jsshop.js

///<reference name="MicrosoftAjax.js"/>

function ordercar(id) {

    var newid = "name" + id;
    var name = $get(newid).innerText;
    var newid = "price" + id;
    var price = $get(newid).innerText;

    var customorder = new order();

    customorder.Id = id;
    customorder.Name = name;

    customorder.Price = price;

    customorder.Count = "1";

    test.GetOrder(customorder, newwin);
}

function newwin(result) {
    var path = "newwin.aspx";
    var a = window.open(path, '服务资料', 'toolbar=yes,menubar=yes,status=yes,scrollbars=yes,width=500,height=300,top=70,left=150'); 

}

function cancel(id) {
    alert(id);
    test.Delproduct(id,newwin);
}

test.asmx

[ScriptService]
[GenerateScriptType(typeof(order))]
public class test : System.Web.Services.WebService {

    public test () {

        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
    [WebMethod(EnableSession = true)]
    public void GetOrder(order customorder)
    {
        Session["order"] = customorder;
    }

    [WebMethod(EnableSession = true)]
    public void Delproduct(string id)
    {
        Session["order"] = "del";     
        ordersummary newsummary = (ordersummary)Session["summary"];

        newsummary.Totalcount = newsummary.Totalcount - ((order)newsummary.Ht[id]).Count;
        newsummary.TotalMoney -= ((order)newsummary.Ht[id]).Price * ((order)newsummary.Ht[id]).Count;
        newsummary.Ht.Remove(id);
        Session["summary"] = newsummary;
    }
}

4 个解决方案

#1


function newwin(result) {
    var path = "newwin.aspx";
    var a = window.open(path, '服务资料', 'toolbar=yes,menubar=yes,status=yes,scrollbars=yes,width=500,height=300,top=70,left=150'); 

}
"newwin.aspx";后面加个随机数,否则ie认为可以调用缓存。

#2


先谢谢您! 
 var path = "newwin.aspx"+随机数; 这样加吗?

#3


window.open('','',bool) 第三个参数是不是用来设置缓存的,可是我true 和false 都用了还是不行呢
求高手指教   郁闷了 好几天了

#4


加一个随机变量,保持每次请求的URL不同就可以了。
例如:<script type='text/javascript'>window.open('BookIndexNew.aspx?time=" + DateTime.Now +"','MainFrame');</script>

#1


function newwin(result) {
    var path = "newwin.aspx";
    var a = window.open(path, '服务资料', 'toolbar=yes,menubar=yes,status=yes,scrollbars=yes,width=500,height=300,top=70,left=150'); 

}
"newwin.aspx";后面加个随机数,否则ie认为可以调用缓存。

#2


先谢谢您! 
 var path = "newwin.aspx"+随机数; 这样加吗?

#3


window.open('','',bool) 第三个参数是不是用来设置缓存的,可是我true 和false 都用了还是不行呢
求高手指教   郁闷了 好几天了

#4


加一个随机变量,保持每次请求的URL不同就可以了。
例如:<script type='text/javascript'>window.open('BookIndexNew.aspx?time=" + DateTime.Now +"','MainFrame');</script>