2014-03-12 239 views
0

當我嘗試發送跨域請求google.docs URL它的工作原理,但是當我嘗試把它發送到服務器上的其他領域,它提供了錯誤:跨域AJAX請求頭

XMLHttpRequest cannot load http://katrin.kit.edu/adei/services/getdata.php?db_server=orca&db_name=orca_process&db_group=Data_001_PAC_dat&db_mask=0,1,2,3,4,5,6,7&window=-1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

但是,當我嘗試google.doc它返回正常的解析對象沒有任何錯誤。

我的要求:

function ajax(url, callback, filetype, type) { 
filetype = filetype ? filetype : 'json'; 
type = type ? type : 'GET'; 
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
var success = function(e) { 
    var items = ''; 
    switch(filetype) { 
     case 'csv': items = csv(xhr.responseText); break; 
     case 'json': items = JSON.parse(xhr.responseText); break; 
     default: items = xhr.responseText; break; 
    } 
    callback(items); 
} 
var error = function(e) { console.log('Please enabled CORS using access-control-allow-origin'); } 
if (window.XDomainRequest && !sameOrigin(url)) { xhr = new XDomainRequest(); xhr.onload = success; } 
if (filetype == 'image' && xhr.overrideMimeType) { xhr.overrideMimeType('text/plain; charset=x-user-defined'); } 
xhr.onerror = error; 
xhr.onreadystatechange = function(e) { if (xhr.readyState == 4 && xhr.status == 200) { success(e); } } 
try { 
    if ('withCredentials' in xhr) { xhr.open(type, url, true); } 
    else { xhr.open(type, url); } 
    xhr.send(null); 
} 
catch(e) { error(e); } 
} 

// check if url is same domain 

function sameOrigin(url){ 
    var split = url.split('/'); 
    if (split[0]+'//' == window.location.protocol+'//') { return split[2] != window.location.host ? false : true; } 
    else { return true; } 
} 

// calculate length of object 

function size(obj) { 
    var size = 0, key; 
    for (key in obj) { 
    if (obj.hasOwnProperty(key)) size++; 
    } 
return size; 
} 

我試圖改變標題,但仍有問題:

這裏是標頭MYSERVER網址: myanotherserverurl

這裏頭的谷歌文檔的網址: enter image description here

其次我嘗試設置myserve R-本地主機。添加了一些標題來響應,如:

def index(request): 
data = { 
    'title': getattr(settings, 'TITLE'), 
    'description': getattr(settings, 'DESCRIPTION') 
} 
response = render_to_response('dimension/index.html', data, context_instance=RequestContext(request)) 

response['Access-Control-Allow-Origin'] = '*' 
response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' 
response['Access-Control-Max-Age'] = '1000' 
response['Access-Control-Allow-Headers'] = '*' 
return response 

但我認爲問題與我的本地主機服務器無關。

而我試過jsonp庫。它的工作原理,但實際上只有json文件。但我需要像csv一樣的不同格式。

在此先感謝!

+0

我們無法看到圖像。請發佈文字而不是圖片。順便說一下,可以用jsonp請求獲取csv文件('文本')。事實上,使用jQuery非常簡單。 –

+0

@OscarPaz,你可以在這裏寫下如何使用jsonp來解析任何數據類型。因爲我搜索了很多網站,發現它是不可能的(我的意思是如果csv文件放入1個json對象中就可能了:{obj1:'csv'} –

回答

2

要進行跨域請求,您請求的域應授予您權限,並將該權限作爲對請求的響應發送回瀏覽器。如果瀏覽器發現您的名字不在允許的客戶端列表中,瀏覽器會顯示錯誤信息。所以,你無法在任何域名上提出請求。這是爲了防止CSRF-跨站請求僞造。