1

我正在尝试从用户提供的 URL 中获取数据文件,但我不知道该怎么做。实际上,我可以成功地从我的服务器获取数据。这是我的代码:

$("button#btn-demo").click(function() {
  $.get('/file', {
    'filename' : 'vase.rti',
  },
  function(json) {
    var data = window.atob(json);

    // load HSH raw file
    floatPixels = loadHSH(data);

    render();
  });
});

它可以从我的服务器获取二进制数据,解析文件并将其渲染成图像。但现在我希望它在没有任何服务器的情况下工作,这意味着用户可以提供一个 URL,而 javascript 可以获取文件并呈现它。我知道这是关于跨站点请求的。你能告诉我它以及如何实现它吗?提前致谢!

4

2 回答 2

0

我对 jQuery 不是很熟悉,但据我所知,由于相同的来源策略,浏览器不会让任何 JavaScript 代码向它自己的域以外的域发出 AJAX 请求。因此,为了检索一些数据(特别是 JSON 格式的),您可以<script>动态地将元素添加到页面并将其src属性设置为数据提供者的地址。像这样的东西:

<script src='otherdomain.com/give_me_data.json'/>

这仅在您需要访问一些静态数据(如上面的 url)或您有权访问服务器端代码时才有效。因为在这种情况下,服务器端代码应该返回一个字符串,如:

callbackFunction({data1: 'value1', data2: 'value2', ...});

当浏览器获取src属性中指定的项目时,尝试运行它(因为它知道这是一个脚本)。因此,如果服务器将函数调用作为响应发送,则在获取所有数据后将立即调用该函数。

您可以通过以下方式实现服务器端:它接受回调函数的名称作为参数,加载请求的数据并生成适当的输出,该输出由函数调用和加载的数据作为 json 参数组成。

于 2013-09-19T21:04:18.350 回答
0

假设你的 URL 是一个有效的 XML 文档的地址,这个例子会去抓取它。如果 URL 与保存脚本的域不同,您将需要使用服务器端脚本语言来获取资源(URL 值的 XML 文档)并将其返回您的域。在 PHP 中它会是......

<?php echo file_get_contents( $_GET['u'] );

其中 $_GET['u'] 是来自您的 USER 的 URL 值。让我们调用我们的 PHP 脚本proxy.php。现在我们的 JavaScript 将调用我们的 proxy.php 并将 URL 值连接到末尾,这将允许我们将 URL 值传递给 PHP 脚本。

addy = $("#idOfInputFieldhere").val();
$.ajax({
  url: 'proxy.php?u='+addy, /* we pass the user input url value here */
  dataType:'xml',
  async:false,
  success:function(data){
    console.log(data); /* returns the data in the XML to the browser console */
  }
});

您需要使用 chrome 中的 js 调试器控制台来查看data. 此时,您需要循环提取数据并使用 find() http://api.jquery.com/?s=find%28%29

于 2013-09-19T20:56:09.637 回答