asp.net/jQuery:用jQuery将数据发布到弹出窗口

我正试图在asp.net应用程序中使用jQuery将数据发布到弹出窗口。

如果弹出窗口打开,我会收到三个错误。 第一个错误是:

Errror: the value of the property is null or undefined not a function object 

(错误代码[代码在弹出网站]:http://www.suckmypic.net/26449/e65f2d77.png,原始代码[代码在弹出网站]:http://www.suckmypic.net/26450/ 7dfdf013.png)

然后我得到two errors正确包含的私有函数two errors

然后 – 如果我正在重新加载弹出窗口, 一切正常。

我用这种方式打开弹出窗口:

 $.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { hWndHelp = window.open('', 'help', cStyle); hWndHelp.focus(); hWndHelp.document.open(); hWndHelp.document.write(result); hWndHelp.document.close(); }); 

(它存储在一个函数中,我正在按下f1键,它工作正常)

我在主页和弹出窗口中引用了所有函数和jquery库。

编辑

cStyle var的代码:

 var WIN_STYLE_RESIZE = 'resizable = yes, ' + 'status = yes, ' + 'scrollbars = yes'; var cStyle = WIN_STYLE_RESIZE + ', ' + 'width = ' + w + ', ' + 'height = ' + h + ', ' + 'top = ' + y + ', ' + 'left = ' + x; 

(w,h,y,x是计算出的数字,基于窗口大小)

如果我将其简单地改为'width=600,height=400' ,则仍会出现错误。

如果我通过get发送变量也可以,但我需要隐藏URL中的变量。

工作获取方法:

 var getUrl = "popup.aspx?X="+$('#X1').val()+"&...."; hWndHelp = window.open(getUrl, 'help', cStyle); 

另一个编辑:刚试过chrome和firefox – 没有错误。 但是我需要代码才能使用IE

在访问之前给它一些时间打开window 。 试试这个。

 $.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { var hWndHelp = window.open('', 'help', cStyle); setTimeout(function(){ hWndHelp.focus(); hWndHelp.document.open(); hWndHelp.document.write(result); hWndHelp.document.close(); }, 400); }); 

首先感谢回复。

我已经尝试了每一个答案,但我仍然总是在Internet Explorer中得到错误。

我找到了一个解决方法,但它并没有让我高兴,因为我认为生成一个带有输入字段的新表单对我的需求来说太多了。

因为它是将数据发布到弹出窗口而不会出现jQuery错误的唯一工作选项,所以我决定使用它。

 var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "popup.aspx"); form.setAttribute("target", "help"); var input = document.createElement("input"); input.type = "hidden"; input.name = "X"; input.value = $("#X").val(); form.appendChild(input); var input2 = document.createElement("input"); input2.type = "hidden"; input2.name = "XX"; input2.value = varX; form.appendChild(input2); var input3 = document.createElement("input"); input3.type = "hidden"; input3.name = "XXX"; input3.value = varXY; form.appendChild(input3); var input4 = document.createElement("input"); input4.type = "hidden"; input4.name = "Z"; input4.value = varZ; form.appendChild(input4); document.body.appendChild(form); hWndHelp = window.open("about:blank", "help", cStyle); hWndHelp.focus(); form.submit(); document.body.removeChild(form); 

原始来源: http //taswar.zeytinsoft.com/2010/07/08/javascript-http-post-data-to-new-window-or-pop-up/

我猜jquery库正在两个页面上加载。

你还在$(function(){…….}中包含了$ .​​post

$ .post $ .ajax的简写函数,因此它可以作为异步函数使用。 如果可能的话,我建议让它同步。

试试这个:

 $.ajax({ type: 'POST', url: 'popup.aspx', data: { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, success: function(data, textStatus, jqXHR) { var hWndHelp = window.open('about:blank', 'help', cStyle); hWndHelp.focus(); hWndHelp.document.open(); hWndHelp.document.write(data); hWndHelp.document.close(); }, dataType: 'html' }); 

我做了一个jQuery插件来做到这一点。 不一定是jQuery,但我的是。

 (function ($) { $.submitFormToPopup = function (action, params, target, windowOpts) { var formID = 'submitFormToPopup'; var form = $('
') .attr('method', 'post') .attr('action', action) .attr('target', target) .attr('id', formID); $.each(params, function (key, value) { form.append($('') .attr('type', 'hidden') .attr('name', key) .attr('value', value)); }); $(document.body).append(form); window.open('about:blank', target, windowOpts); form.submit(); $(document.body).remove('#' + formID); }; })(jQuery);

看起来你在popup.aspx中缺少jQuery。 确保包含在内。