2010-07-24 28 views
3

我正在爲服務構建一個書籤。我需要從打開的窗口傳輸數據(網址,文本),但我不知道哪種方法是最好的。 GET限制了數據量,並且由於跨域問題,ajax是不可能的。帶書籤的數據傳輸方法

什麼是最佳方式?

回答

7

如果數據量很大,則可以使用POST。使用帶有文本框的表單創建隱藏的iframe。將表單方法設置爲發佈並將操作發送到您的服務。將數據放入文本框中,將iframe附加到文檔中,然後提交表單。

嘗試這樣:

function postData (data, url, cb) { 

    var f  = document.createElement('iframe'), 
     fname = (+((''+Math.random()).substring(2))).toString(36); 

    f.setAttribute('name', fname); 
    f.setAttribute('id', fname); 
    f.setAttribute('style', 'width:0;height:0;border:none;margin:none;padding:none;position:absolute;'); 

    document.body.appendChild(f); 

    var frame = window.frames[fname], 
     doc = frame.document, 
     form = doc.createElement('form'), 
     text = doc.createElement('textarea'); 

    text.setAttribute('name', 'data'); 
    text.appendChild(doc.createTextNode(data)); 

    form.setAttribute('action', url); 
    form.setAttribute('method', 'post'); 
    form.appendChild(text); 

    doc.body.appendChild(form); 

    if (cb) { document.getElementById(fname).onload=cb; } 

    doc.forms[0].submit(); 
    } 

您可以從文檔中刪除的iframe回調,如果你想要的。

+0

工作就像一個魅力,它感覺像解決問題的邏輯方法。謝謝! – jorilallo 2010-07-24 23:21:23

+0

嘿,你會如何讓它在新窗口中打開?因爲現在對我來說表格提交的很好,但新窗口不存在.... – 2012-12-24 22:37:26

-1

該方法沒有建議可行。

解決跨域問題的一種替代方法:您可以託管一個需要大部分JavaScript(包括XHR代碼)的JS文件,並且只需使用您的小書籤代碼將腳本元素插入到當前頁面引用的JS文件(換行符增加了可讀性,消除他們當然書籤代碼):

javascript:(function() { 
    var sc = document.createElement("SCRIPT"); 
    sc.type = "text/javascript"; 
    sc.src = "http://domain.com/path/to/script.js"; 
    document.body.appendChild(sc); 
})(); 
0

你可以把你的數據在編碼JSON字符串,並與和AJAX POST發送。 AJAX支持POST。