我設法讓跨域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綁定...
任何想法將受到感謝。