2013-04-01 117 views
2

我想POST HTML表單到web-api。跨域ajax POST到web-api始終返回空響應

如果我在其他域中使用jQuery執行ajax POST,一切正常,我收到200 OK ,但在螢火蟲和響應選項卡中收到我收到類似下圖的空白響應。 這是我的jQuery代碼:

var formData = new FormData($('form')[0]); 
       var response = ''; 
       $.ajax({ 
        url: 'http://localhost:2143/api/controller', 
        type: 'POST', 
        // Form data 
        data: formData, 
        //Options to tell JQuery not to process data or worry about content-type 
        cache: false, 
        contentType: false, 
        processData: false, 
        success : function(text) 
        { 
         response = text; 
         alert(response); 
        } 
       }); 

請幫我...

回答

5

由於是內置的瀏覽器不允許進行跨域AJAX調用的same origin policy restriction。你有幾個可能的解決方法:

  1. JSONP - 這裏的想法是,你的服務器將在回調中包裝JSON響應。這隻適用於GET請求,所以它可能不適合你的情況,我可以看到你試圖發送一個POST請求。您可以使用自定義JsonpMediaTypeFormatter,如this similar post所示。
  2. CORS - 服務器應發送一個特殊的Access-Control-Allow-Origin響應HTTP標頭。這裏的缺點是舊版瀏覽器可能不支持它。這是一個blog post更詳細的報道。
  3. 服務器端網橋。如果之前的兩種技術因爲他們施加的限制而無法爲您工作,那麼您可以在承載您的JavaScript的域上有一個服務器端腳本,它將充當您的域和託管該API的遠程域之間的代理。在這種情況下,您將發送AJAX請求到您自己的域,然後調用遠程API並將結果返回給客戶端。