簡體   English   中英

跨域Jquery JSONP POST到Rails應用

[英]Cross-domain Jquery JSONP POST to Rails app

這真殺了我。 嘗試從與我嘗試編寫的API不同的域中加載數據。 當以POST方式發送JSON參數時,它們將被丟棄,我讀過某處必須在before_filter處設置一些特殊的標頭:

  def cors_headers #set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age'] = "1728000"
    headers['Access-Control-Allow-Headers'] = 'content-type, accept'
  end

雖然還沒有運氣。 猜猜這是瀏覽器的限制。

當我嘗試將數據作為GET而不是POST發送時,它會像這樣添加到URL:

Completed in 959ms (View: 0, DB: 2) | 200 OK [http://www.somedomain.com/connector/browse/Sport.json?callback=jQuery16105855946165975183_1379526705493&{%22filters%22:[{%22filter%22:{%22attribute%22:%22id%22,%22op
erator%22:%22%3E%22,%22value%22:%222%22}},{%22filter%22:{%22attribute%22:%22id%22,%22operator%22:%22%3C%22,%22value%22:%227523%22}}]}&_=1379526723982]

因此,Rails基本上看不到過濾器,這是我要發送的參數

  Parameters: {"{\"filters\":"=>{}, "id"=>"Sport", "_"=>"1379526723982", "callback"=>"jQuery16105855946165975183_1379526705493"}

我正在玩的jquery片段是:

        $jq.ajax({url: "http://www.somedomain.com/connector/browse/" + x + ".json" + "?callback=?",
            type: "get", // tried post too
            dataType: "json", // tried jsonp too
            accepts: "json",
            data: req_data, // this is JSON.stringified already
            processData:false,
            contentType: "application/json; charset=UTF-8;",
            success: output
        });

我要發送的樣本數據是這個

{"filters":[{"filter":{"attribute":"id","operator":">","value":"2"}},{"filter":{"attribute":"id","operator":"<","value":"7523"}}]} 

有誰知道如何解決這個問題?

Muchos gracias!

基本上,JS SOP阻止我們發送POST請求和讀取響應,但是這可以這樣工作圍繞:

1)編寫請求數據,以POST形式發送。 不要期望收到答復。 不要在成功上使用,而在完成上使用。 向請求添加一個隨機ish變量

2)將響應臨時存儲在服務器端的文件或會話變量或memcached服務器中,使用上述隨機變量作為存儲區中的鍵。

3)發送第二個JSON AJAX調用以獲取緩存的對象。

使用memcached時,請確保不時刪除已緩存的響應或使其過期,在我的情況下,該應用將獲得大量流量,如果未將其設置為過期,則會使我的memcache服務器垃圾郵件。

這是一些示例代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM