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。 确保包含在内。