междоменный запрос ajax - ошибки безопасности XD при повторной отправке - PullRequest
0 голосов
/ 25 июля 2011

Мне удалось заставить работать междоменный запрос ajax.Проблема, с которой я столкнулся сейчас, заключается в том, что это работает при первой отправке, но любая последующая отправка без обновления страницы не соответствует проверке безопасности домена в браузере.

У меня есть 2 домена на моей локальной машине;'www.webservice.dev' и 'www.consume.dev'.

В самозагрузке.dev я вставляю некоторые js, размещенные на веб-сервисе, вот так:

<script type="text/javascript">
$(function(){
var $scrpt = $('<script />');
$scrpt.attr({
    'type' : 'text/javascript',
    'src':'http://www.webservice.dev/_assets/script/processEvent.js'
});
$('head').append($scrpt);

});
</script>

Этот скрипт содержит:

$(function() {

    var $scrpt = $('<script />');

    $scrpt.attr({
        'type' : 'text/javascript',
        'src' : 'http://www.webservice.dev/_assets/script/jquery/plugins/jquery.form/jquery.form.js'
    });

    $('head').append($scrpt);

    $('<iframe />')
        .attr({
            'id' : 'eventFormTarget',
            'name' : 'eventFormTarget'
        })
        .css( {
            'width' : '1px',
            'height' : '1px',
            'position' : 'absolute',
            'left' : '-9999px',
            'top' : '-9999px'
        })
        .prependTo('body');

    $('#event-form').bind('submit', function(){
        $(this).ajaxSubmit({
            url         : 'http://www.webservice.dev/webservices.php',
            type        : 'POST',
            dataType    : 'html',
            data        : {
                              ajax : 'true',
                              webservice : 'processEvent'
                          },
            error       : function(jqXHR, textStatus, errorThrown) {
                              console.log(jqXHR, textStatus, errorThrown);
                              /*
                               * try{ $('#event-form').trigger('submit'); }catch(e){
                               * console.log(e); };
                               */
                          },
            complete    : function(){

                          },
            iframeTarget : '#eventFormTarget',
            iframe      : true
        });
        return false;
    });

});

Теперь, надеюсь, вы увидите из сценария, что я добавляю iframe на страницу и использую плагин jquery form для выполнения магии.Поскольку сообщение выполняется через iframe ajaxSubmit НЕ получает ответ на процесс - я обрабатываю это в другом месте ...

НО ответ об ошибке доступен.

При первом представлении формы ниОбнаружены ошибки, и я могу проверить результат моего кода обработки на webservice.dev.Как только другой запрос отправляется, происходит событие ошибки, в результате которого в консоли Chrome выдается следующее сообщение (firebug очень похож):

Unsafe JavaScript attempt to access frame with URL http://www.nmssys.dev/webservices.php from frame with URL http://dev.dev/. Domains, protocols and ports must match. jquery.form.js:904
[jquery.form] Server abort: TypeError: Cannot read property 'readyState' of undefined (TypeError)
Unsafe JavaScript attempt to access frame with URL http://www.nmssys.dev/webservices.php from frame with URL http://dev.dev/. Domains, protocols and ports must match. jquery.form.js:904
[jquery.form] aborting upload... aborted
Object "aborted" "server abort"

Вы можете заметить, что в моем коде я пытаюсь исправить ошибку и вызвать дальнейшую отправку,Это будет успешным, но с разными результатами.В Firefox еще одна отправка кажется успешной, однако chrome может сделать еще 3-5 заявок.

Мне бы очень хотелось решение, которое бы предотвратило все эти шананиганы.Что-то вроде удаления iframe и чтения - или обновления привязки ajaxsubmit ...

Любые идеи будут с благодарностью приняты.

1 Ответ

0 голосов
/ 26 июля 2011

Исправлено !!!

Я использовал плагин jquery postmessage , чтобы получить ответ от iframe.После того, как ответ был проанализирован просто:

$('iframe').attr('src','');

делает все снова и снова ...

...