Публикация данных в iframe colorbox?

Вот код, с которым я работаю. Из других примеров, которые я видел, это должно работать, но это не так. И уже убедился, что использую последнюю версию Colorbox.

function updateFolderCate(ID,Type){
    $.colorbox({
        iframe:true,
        scrolling: false,
        innerWidth:'100',
        innerHeight:'100',
        href:"page.php",
        data:{LinkID:ID,itemType:Type},
        onClosed:function(){
            //Do something on close.
        }
    });
}

person SReca    schedule 16.03.2012    source источник
comment
Он упоминается на сайте colorbox - для отправки значений GET или POST через запрос ajax. Свойство data будет действовать точно так же, как аргумент данных jQuery .load (), поскольку ColorBox использует .load () для обработки ajax. Итак, я пошел на сайт jquery, .load нужны данные, чтобы быть объектом для публикации. Как мне это сделать с помощью Colorbox?   -  person SReca    schedule 11.05.2012


Ответы (5)


Вы устанавливаете iframe в значение true. Это открывает окно цвета, создает iframe и устанавливает атрибут src iframe в местоположение, указанное href. Таким образом, логически это не может выполнять запросы POST. Это может сделать то, что вы хотите, но я не уверен.

function updateFolderCate(ID,Type){
    $.colorbox({
        open: true,
        scrolling: false,
        innerWidth:'100',
        innerHeight:'100',
        href:"page.php",
        data:{LinkID:ID,itemType:Type},
        onClosed:function(){
            //Do something on close.
        }
    });
}

Это не будет вести себя так же, как метод iframe, возможно, вам придется переделать конечную точку. Если ваша конечная точка НЕ ​​ДОЛЖНА получать только запросы POST, используйте ответ Earlonrails.

РЕДАКТИРОВАТЬ: я пришел к этому после погружения в исходный код: Source

Соответствующие строки - это строка 800 и строка 856. iframe и href кажутся несовместимыми, поэтому я проверил элемент, который был загружен в Firebug, и заметил, что это iframe с атрибутом src, установленным для переменной href.

person Erik Petersen    schedule 13.05.2012
comment
Спасибо, Эрик! Я протестировал этот код, и он отлично сработал! Я не хотел передавать переменную через URL-адрес и использовать GET. - person SReca; 15.05.2012

Он действительно говорит: «.load (url [, data] [, complete (responseText, textStatus, XMLHttpRequest)]) url - строка, содержащая URL-адрес, на который отправляется запрос. Data - карта или строка, которая отправляется на сервер с запросом. . "

И у вас есть объект href, но я не думаю, что они используются вместе в этом случае. Чтобы использовать .load или в этом случае данные, я думаю, вам нужно указать URL-адрес. Я думаю, что любой из этих способов может сработать.

   function updateFolderCate(ID,Type){
        $.colorbox({
            iframe:true,
            scrolling: false,
            innerWidth:'100',
            innerHeight:'100',
            href:"page.php?LinkID=" + ID + "&itemType=" + Type,
            // or data : { "page.php", { LinkID:ID,itemType:Type } } 
            onClosed:function(){
                //Do something on close.
            }
        });
    }

http://www.codingforums.com/showthread.php?t=158713

http://api.jquery.com/load/

person earlonrails    schedule 12.05.2012

Вы можете открыть пустую страницу в iframe, которая получает данные с верхней страницы и сама публикует их следующим образом:

var postData = window.top.getDataToPost()
$.post(postUrl,postData)

На странице, которая открывает палитру цветов, создайте функцию для предоставления значения

function getDataToPost() {
   return { param1 = value1 }
}
person Cagatay Kalan    schedule 29.06.2015

В вашем примере кода data - это объект. В этом случае он создается с помощью синтаксиса литерала объекта.

Что именно происходит?

  1. В каком браузере (включая номер версии) вы его пробовали?

  2. Какую версию jQuery вы используете?

  3. Есть ли ошибки в консоли?

  4. Просматривали ли вы запрос на вкладке сети в Firebug (или других инструментах разработчика / Fiddler / и т. Д.), Чтобы точно узнать, что содержится в запросе (например, метод запроса) и ответ сервера?

  5. Вы пробовали выполнить запрос напрямую, используя jQuery.load(), чтобы посмотреть, что произойдет?

person JMM    schedule 12.05.2012

Я решил эту проблему, перейдя в цветовом поле к about: blank, а затем, в обратном вызове onComplete, отрисовав форму со скрытыми полями, которая отправляется с данными POST. Идеально подходит для этой цели.

function createFormInputsFromObject(data, prefix) {
  prefix = prefix || '';
  var inputs = '';

  jQuery.each(data, function(name, value){
    if (prefix !== '') name = prefix + '[' + name + ']';
    if (Array.isArray(value) || value instanceof Object) {
      inputs += createFormInputsFromObject(value, name);
    }
    else {
      inputs += jQuery('<input>').attr({type: 'hidden', name: name, value: value}).prop('outerHTML');
    }
  });

  return inputs;
}

function showPdf(url, postData) {
  jQuery.colorbox({
    iframe: true,
    href: 'about:blank',
    width: '90%',
    height: '90%',
    onComplete: function() {
      var iframe = jQuery('#cboxLoadedContent iframe');
      var form = jQuery('<form>').attr({action: url, method: 'POST', target: iframe.attr('name')});
      if (!jQuery.isEmptyObject(postData)) {
        jQuery(createFormInputsFromObject(postData)).appendTo(form);
      }
      form.appendTo(iframe)
          .submit()
          .remove();
    }
  });
}


showPdf('/source/url', {sitName: 'sitka', items: [2, 4, 5, 6], extended: {i1: [10, 20], i2: {a: 0, b:1}}});
person Richard Toth    schedule 14.05.2018