2017-05-02 61 views
2

我遇到初始問題,請求的資源上沒有「Access-Control-Allow-Origin」標頭。我的解決方案是通過刪除https上的s,它的工作原理,但我認爲這不是真正的解決方案。請求的資源上沒有「Access-Control-Allow-Origin」標頭

<script src="https://code.jquery.com/jquery-3.1.0.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.1.2/papaparse.js"></script> 
     <script> 
     function arrayToTable(tableData) { 
       var table = $('<table></table>'); 
       $(tableData).each(function (i, rowData) { 
        var row = $('<tr></tr>'); 
        $(rowData).each(function (j, cellData) { 
         row.append($('<td>'+cellData+'</td>')); 
        }); 
        table.append(row); 
       }); 
       return table; 
      } 

      $.ajax({ 
       type: "GET", 
       url: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/162656/csv_data.csv", 
       success: function (data) { 
        $('.here').append(arrayToTable(Papa.parse(data).data)); 
       } 
      }); 
     </script> 
+0

您的第二個腳本標記格式不正確。它應該是'' – litel

+0

好了解決了它,但這不是問題的根源,謝謝隊友:)。 – camdev

+0

您的前端代碼是否也在's3-us-west-2.amazonaws.com'上運行?如果是這樣,你可以使用'url:「/ s.cdpn.io/162656/csv_data.csv'並且它會工作。 – sideshowbarker

回答

1

您的AJAX調用需要先發送預檢請求以獲得「許可」來執行此請求。您可以通過將Content-Type標頭添加到具有application/x-www-form-urlencoded,multipart/form-datatext/plain以外的值的請求來觸發此操作。

$.ajax({ 
    type: "GET", 
    contentType: 'html', 
    url: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/162656/csv_data.csv", 
    success: function(data) { 
    $('.here').append(data); 
    } 
}); 

上面的代碼將發出兩個請求:一個OPTIONS請求和一個GET請求。我建議您在此運行演示(https://jsfiddle.net/bjyzs8y1/)並分析網絡選項卡以查看請求和響應。 enter image description here

+0

我在你的https://jsfiddle.net/bjyzs8y1/上得到了這些錯誤。我想我的谷歌瀏覽器是這裏的問題嗎? 無法加載資源:net :: ERR_BLOCKED_BY_CLIENT XMLHttpRequest無法加載https://s3-us-west-2.amazonaws.com/s.cdpn.io/162656/csv_data。 csv。沒有'Access-Control-Allow-Origin'標題出現在被請求的資源上,因此不允許Origin'https://fiddle.jshell.net'訪問 加載資源失敗:net :: ERR_BLOCKED_BY_CLIENT – camdev

+0

嘗試在私人瀏覽器會話中打開演示。 –

+0

@camdev是否有效? –

相關問題