2011-07-25 17 views
0

クロスドメインのajaxリクエストを処理できました。私が今問題を抱えているのは、これが最初の投稿時には動作しますが、ページリフレッシュなしのそれ以降の投稿では、ブラウザのドメインセキュリティチェックが無効になります。クロスドメインajaxリクエスト - 再提出時のXDセキュリティエラー

私のローカルマシンには2つのドメインがあります。 'www.webservice.dev'と 'www.consume.dev'です。

私はいくつかのjsをwebserviceでホストされているように挿入します。

<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のフォームプラグインを使用しtehのスクリプトから表示されます。投稿がiframe経由で処理されるので、ajaxSubmitは処理するレスポンスを取得しません - 他の場所で処理します...

しかし、エラー応答は利用可能です。

フォームの最初の送信時にエラーが検出されず、webservice.devで処理コードの結果を確認できます。別の要求が送信されるとすぐにエラーイベントは、クロームコンソール(かなり似た放火魔)に次のようにyeildingトリガーされます。

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" 

あなたは私のコードに注意して、私はエラーをカテーテル検査し、さらに提出をトリガしてみてください。これは成功しますが、結果は異なります。ファイアフォックスではさらに1回の提出が成功すると思われるが、クロムはさらに3〜5回の提出を行うことができる。

私はこれらすべてのシャナニガンを防止する解決策が好きです。何かをiframeを削除して読んだり、またはajaxsubmitバインディングをリフレッシュするようにしてください...

感謝の気持ちでお待ちしております。

答えて

0

固定!!!

私はjquery postmessage pluginを使ってiframeからの応答をキャプチャしています。応答がシンプルに解析された後:

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

はドーリー再び...

をすべてがすべて互角になり
関連する問題