asp.net/jQuery: отправлять данные с помощью jQuery во всплывающее окно [IE] - PullRequest
6 голосов
/ 03 февраля 2012

Я пытаюсь опубликовать данные с помощью jQuery в приложении asp.net во всплывающем окне.

Если всплывающее окно открывается, я получаю три ошибки. Первая ошибка:

 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 частных функций, которые включены правильно.

Тогда - если я перезагружаю всплывающее окно, все работает нормально.

Я открываю всплывающее окно следующим образом:

$.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 .

Ответы [ 6 ]

2 голосов
/ 09 февраля 2012

Прежде всего, спасибо за ответы.

Я пробовал каждый ответ, но все равно всегда получаю ошибки в 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/

2 голосов
/ 03 февраля 2012

Дайте время открыть 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);
});
1 голос
/ 03 октября 2012

Я сделал плагин jQuery для этого.Не должен быть jQuery, но мой.

(function ($) {
    $.submitFormToPopup = function (action, params, target, windowOpts) {
        var formID = 'submitFormToPopup';
        var form = $('<form />')
            .attr('method', 'post')
            .attr('action', action)
            .attr('target', target)
            .attr('id', formID);
        $.each(params, function (key, value) {
            form.append($('<input />')
                .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);
1 голос
/ 09 февраля 2012

попробуйте это:

$.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'
});
1 голос
/ 06 февраля 2012

Я полагаю, библиотека jquery загружается на обе страницы.

А также вы включили $ .post в $ (function () {.......}

$. Post сокращенная функция для $ .ajax, поэтому она работает как асинхронная. Я предлагаю сделать его синхронным, если это возможно.

0 голосов
/ 06 февраля 2012

Похоже, вам не хватает jQuery в popup.aspx. Убедитесь, что оно включено.

...