2011-07-25 29 views
0

我設法讓跨域ajax請求工作。我現在遇到的問題是,它在第​​一次提交時起作用,但是沒有頁面刷新的任何後續提交都會影響瀏覽器中的域安全檢查。跨域ajax請求 - 重新提交時發生XD安全錯誤

我在本地機器上有2個域名; 'www.webservice.dev'和'www.consume.dev'。

On 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插件的形式進行魔術德劇本看。由於這個帖子是通過iframe完成的,ajaxSubmit沒有得到處理響應 - 我在其他地方處理...

但是錯誤響應是可用的。

在首次提交表單時也檢測不到錯誤,我可以在webservice.dev上檢查我的處理代碼的結果。只要另一個請求被髮送的錯誤事件被觸發yeilding以下在Chrome控制檯(螢火蟲非常相似):

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" 

你可以在我的代碼注意我嘗試CATH錯誤並引發進一步的提交。這將取得成功,但結果不同。在firefox中,一個進一步的提交似乎成功了,但是可以進行3-5次提交。

我非常喜歡解決方案,可以防止所有這些shananigans。 Somethng喜歡刪除iframe和讀取 - 或刷新ajaxsubmit綁定...

任何想法將受到感謝。

回答

0

固定!!!我使用了jquery postmessage plugin來捕獲iframe的響應。一旦響應已經被解析簡單:

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

使一切都虎背熊腰,腳蹬再次嘟嘟......