2013-07-22 67 views
0

我正在使用Javascript中的xmlhttprequest進行PUT請求以將對象上載到S3存儲桶。 CORS設置正確。這是我正在嘗試的代碼。對於PUT請求的DOM異常19

 var bucketPath = 'http://<bucket-name>.s3.amazon.com/' 
     var fileName = <name> + ".json"; 
     var uploadPath = bucketPath + fileName.replace(/\s/g,"+"); 
     var xmlhttp; 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       showData(); 
      } 
      else{ 
       showError(); 
      } 
      }; 
     xmlhttp.open("PUT",uploadPath,false); 
     xmlhttp.send(JSON.stringify(jsonObject), replacer); 

我得到的代碼的最後一行DOM異常19。不知道什麼是錯的。我試着用樣本測試腳本做同樣的工作。只有當我嘗試將它用於我的應用程序時,它才拋出此異常。

在Chrome調試器下的Network選項卡中,我可以看到一個HTTP請求,其中Method爲OPTIONS,Type爲pending。

我看不到正在發送的實際PUT請求。任何人都可以告訴我問題是什麼,異常是什麼意思?

更新: 仔細查看從jsfiddle和我的應用程序發送的請求。我看到2個請求是從JS Fiddle發送預檢HTTP OPTIONS請求發送的,然後是實際的PUT請求。

雖然它在JS小提琴上效果很好,但另一方面,我的應用程序中的相同代碼發送預檢HTTP OPTIONS請求,但沒有得到200返回狀態。這就是它失敗的原因。

任何想法爲什麼我沒有得到HTTP OPTIONS請求的成功。

+0

我見無處正在使用CORS ... – Ian

+0

我的意思。我已經爲我的S3存儲區設置了CORS規則,以允許來自我的網站的PUT請求 –

+0

但是瀏覽器不知道這一點。我相信你需要使用這樣的東西:http://www.html5rocks.com/en/tutorials/cors/ – Ian

回答