2011-12-19 16 views
0

私はブックマークレットを書いています。ブックマークレットは、サイトから写真やビデオを取り込み、AJAX経由でサーバーに送信する必要があります。問題は、クロスドメインAJAX要求である - 私は、エラーを持っている:外部サイトからAJAX経由でサーバーにデータを送信する方法は?

XMLHttpRequest cannot load http://mysite.com/community/bookmarklet/ . Origin http://www.some-nice-site.com is not allowed by Access-Control-Allow-Origin.

第三部構成のサイトから私のサーバーへのデータ送信を解決する方法は?

注:私は平面のジャバスクリプトのみを使用します。これは開発の規定です。

私のコード:

function getXmlHttp(){ 
    var xmlhttp; 
    if (typeof XMLHttpRequest!='undefined') { 
    xmlhttp = new XMLHttpRequest(); 
    } else {  
    try { 
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (E) { 
     xmlhttp = false; 
     } 
    } 
    }; 
    return xmlhttp; 
}; 

function vote(data) { 
    var req = getXmlHttp(); 
    req.onready = function() { 
    if (req.readyState == 4 & req.status == 200) { 
     alert('OK'); 
    } 
    } 
    req.open('GET', 'http://mydomain.com/community/bookmarklet/'); 
    req.send(JSON.stringify(data())); 
}; 

function dataProcessing(){ 
    //some processing 
    return data; 
}; 

// I tried it, but not deeply understand. 
function JSONPresponse(){ 
    document.getElementById('popup_body').innerHTML = 'done!'; 
}; 
(function(){ 
    function pasteIt(){ 
    // this function is builds the form, which get data for dispatch to my server. 
    }; 

    pasteIt(); 
    document.getElementById('my_button').addEventListener('click', function() {vote(dataProcessing)}, false); 
}()); 
+0

隠された 'iframe'を使い、' string'のテキストを 'src' URLに追加するのが難しいかもしれません。ちょっと言ってください。 –

+2

あなたはこれに[JSONP](http://en.wikipedia.org/wiki/JSONP)を使わなければなりません。 – jabclab

+0

@jakeclarkson、うん - これです! – I159

答えて

0

は語った - JSON-Pは私のためのソリューション、だけでなく、便利です。

XMLHttpRequestはもう必要ありません。その代わりに、vote(data)機能はのparamsでURLを構築するためのスクリプトを作成します。

function vote(data) { 
    var script = document.createElement('script'), 
    data = JSON.stringify(data()); 
    script.type = 'text/javascript'; 
    script.src = 'http://mysite.com/api/bookmarklet/?vids='+encodeURIComponent(data); 
    document.getElementsByTagName('head')[0].appendChild(script); 
}; 

サーバーにすでにスクリプトが満たされているので、URLが呼び出されるとのparams。