2017-05-02 58 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是否有效? –

相关问题