2015-04-14 25 views
0

我使用Ajax post方法調用Rest調用,但是我收到下面的錯誤或響應。即使我啓用cors($。support.cors = true;)和crossDomain(crossDomain:true(添加標題))。無法在Jquery Ajax中獲得剩餘發佈回覆post調用

這裏是樣品要求: -

function() { 
 
     $.support.cors = true;   
 
     var evergentData = { 
 
     "UpdateContactRequestMessage":{ 
 
     "channelPartnerID":"123456", 
 
     "email":"[email protected]", 
 
     "firstName":"greg", 
 
     "lastName":"chappel", 
 
     "externalId":"GC123", 
 
     "sessionToken":"f53095854bb230996f54fe32ed5a63f68c7718c7" 
 
     } 
 
     }; 
 
     
 
     //GetProducts(); 
 
     
 
     jQuery.ajax({ 
 
     type: 'POST', 
 
     url: 'url for rest api call', 
 
     contentType: "application/json", 
 
     Accept: "application/json; charset=utf-8", 
 
     dataType: 'json', 
 
     data: evergentData, 
 
     //data: JSON.stringify(evergentData), 
 
     crossDomain: true, 
 
     processData: true, 
 
     headers: { 'access-control-allow-origin': '*', 
 
     }, 
 
     success: function(resp){ 
 
      // we have the response 
 
      alert("Server said123:\n '" + resp + "'"); 
 
      }, 
 
      error: function(e){ 
 
      alert('Error121212: ' + e); 
 
      alert(e.toString()); 
 
      console.log('my message' + e); 
 
      console.log('tables: ' + JSON.stringify(e)); 
 
      } 
 
      
 
      
 
     }); 
 
    };
但我在「郵差」 Chrome瀏覽器擴展我得到了響應測試此RESTAPI調用(成功得到的迴應)。

這裏是響應頭: -

access-control-allow-headers → client_type, content-type, accept, accept-language, auth_token_base64, appID, accept-encoding, content-length, x-requested-with 

訪問控制允許的方法→POST,GET,OPTIONS,DELETE

訪問控制允許來源→*

允許→GET,HEAD,POST,PUT,DELETE,TRACE,選項

content-length→92

內容類型→應用程序/ JSON

X框選項→SAMEORIGIN

X-的WebObjects-loadaverage→0

任何人能幫助我,爲什麼我沒有得到來自JqueryAjax REST API呼叫響應發佈呼叫。

感謝提前。

+0

更改這個'數據:evergentData'到'數據:JSON.stringify(evergentData)' –

+0

我已經這樣做,但沒有用.... – user1931467

+0

在螢火蟲中顯示 像這樣 跨源請求被阻止:同源策略不允許讀取URL處的遠程資源。這可以通過將資源移動到相同的域或啓用CORS來解決。 和錯誤響應是 {「readyState」:0,「status」:0,「statusText」:「error」} – user1931467

回答

0

明白access-control-allow-origin': '*'在請求頭什麼也不做是很重要的。

Access-Control-Allow-Origin標題都必須是你所調用服務的響應頭。因此,該服務規定允許誰調用資源,因此服務必須將您的應用程序URL添加到其響應頭Access-Control-Allow-Origin

另請注意,通配符*不適用於通過HTTPS訪問的資源。對於通過HTTPS的資源,只有絕對路徑是有效的。

爲什麼郵差工程?導致它忽略了標題和策略,而瀏覽器卻沒有。

更多閱讀:

+0

我正在測試http和https rest api call面臨同樣的問題。 響應添加這些頭 \t response.setHeader( 「client_type,內容類型,接受接受的語言,auth_token_base64,APPID,編碼接受,內容長度,X-請求-與」,「訪問 - 控制允許接頭「); \t \t response.setHeader(「*」,「Access-Control-Allow-Origin」); (「GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS」,「Allow」); \t \t response.setHeader(「POST,GET,OPTIONS,DELETE」,「Access-Control-Allow-Methods」); – user1931467

+0

在訪問控制允許來源我替換我的本地網址也不起作用 – user1931467

+0

@ user1931467 POST請求應該預先使用OPTIONS請求,這是由瀏覽器自動完成的請求。您是否看到對相同服務的OPTIONS請求?對OPTIONS的迴應是什麼? OPTIONS請求是否有標題?有關預檢的詳情 - https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS#Preflighted_requests – tiblu