2010-09-29 2 views
31

У меня есть сценарий, который on.DocumentReady отправляет данные на другую страницу. Эта страница отвечает некоторым HTML, заключенным в один тег div.JQuery post, response in new window

Моя цель состоит в том, чтобы этот пост/данные открылись в новом окне.

Какие-либо намеки или подсказки?

Вот фрагмент, который я создал из совета доктора Миля.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
var packslip_id = 35592; 
var po_no = 0018439; 
var box_no = 1; 
    $.post("https://example.com/barcode/generate", { packing_slip: packslip_id, reference: po_no, total_boxes: box_no}, 
    function (data) { 
     alert(data); 
     var win=window.open('about:blank'); 
     with(win.document) 
     { 
      open(); 
      write(data); 
      close(); 
     } 
    }); 
}); 

+2

использования 'window.open'? – Alec

+0

Думаю, вы должны забыть об этом. Любой Popup-Blocker блокирует новое окно без специального действия пользователя, такого как клики. –

+0

Д-р Молле, я использую это в контролируемой среде, где всплывающие окна включены для моего сайта ... – Peter

ответ

52

Используйте записи() - метод документа всплывающего окна, чтобы поставить разметку там:

$.post(url, function (data) { 
    var w = window.open('about:blank'); 
    w.document.open(); 
    w.document.write(data); 
    w.document.close(); 
}); 
+0

Я думаю, что я использую то, что вы говорите правильно ..., но не раскрывает всплывающее окно или фактически публикует какие-либо данные на сервере. Я положил новый код в исходное сообщение. – Peter

+1

Использование выглядит правильно. Вы используете абсолютный URL-адрес, в чем причина? –

+0

URL-адрес на отдельном сервере. Я получил его сейчас, когда я запустил его на моей локальной установке макета и использовал функцию предварительного просмотра «Coda» ... но когда я запускаю его через сафари, никаких данных не возникает вообще ... Я сейчас смущен. Спасибо за вашу помощь. – Peter

-4

попробовать

$.post('urpage.php',{}, 
function(data) { 
window.open('page.php?data=data') 
}); 

и имеют page.php показать все данные, должен был быть

+0

Страница, которую я отправляю, возвращает html, который я хочу открыть в новом окне ..., чтобы отправить его на другую страницу, похоже, делает это дважды ... – Peter

+0

есть страница, которую вы отправляете, просто отправьте данные. в противном случае я не уверен, что если вы можете передать html в window.open, поиск Google скажет вам быстро, если это возможно. – Ascherer

3

Если вы не нужна обратная связь о запрашиваемых данных, а также не нужна какая-либо интерактивность между новичком и всплывающими окнами, вы можете оставить скрытую форму в всплывающее окно:

Пример:

<form method="post" target="popup" id="formID" style="display:none" action="https://example.com/barcode/generate" > 
    <input type="hidden" name="packing_slip" value="35592" /> 
    <input type="hidden" name="reference" value="0018439" /> 
    <input type="hidden" name="total_boxes" value="1" /> 
</form> 
<script type="text/javascript"> 
window.open('about:blank','popup','width=300,height=200') 
document.getElementById('formID').submit(); 
</script> 

В противном случае вы могли бы использовать jsonp. Но это работает только, если у вас есть доступ к другому серверу, потому что вам нужно изменить ответ.

25

Принятый ответ не работает с «use strict», поскольку инструкция «with» выдает сообщение об ошибке. Таким образом, вместо:

$.post(url, function (data) { 
    var w = window.open('about:blank', 'windowname'); 
    w.document.write(data); 
    w.document.close(); 
}); 

Кроме того, убедитесь, что «Windowname» не имеет места в нем, потому что не сможет в IE :)