Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在单页框架(如主干木偶网)中使用公共的跨域json数据?_Javascript_Json_Asp.net Web Api_Cross Domain_Marionette - Fatal编程技术网

Javascript 如何在单页框架(如主干木偶网)中使用公共的跨域json数据?

Javascript 如何在单页框架(如主干木偶网)中使用公共的跨域json数据?,javascript,json,asp.net-web-api,cross-domain,marionette,Javascript,Json,Asp.net Web Api,Cross Domain,Marionette,这是一个很难正确表述的问题,因为我在“公共API”和“跨域”领域的知识有太多空白 也许最好的方法就是给出一个真实的例子: 我有一个主干木偶应用程序。很酷。它正在做很多我想让它做的事情 我还有一些非常酷的图表——一个商业HTML5图表库。我想利用我的bb木偶应用程序中的图表库 这是钥匙。我想在图表中显示的数据不是我的。这是纽约时报API()提供的竞选财务数据。它也是其他公共api中提供的其他数据 在我的脑海中,我想我只要将我的bb木偶数据模型连接到纽约时报提供的json URL,调用model.f

这是一个很难正确表述的问题,因为我在“公共API”和“跨域”领域的知识有太多空白

也许最好的方法就是给出一个真实的例子:

我有一个主干木偶应用程序。很酷。它正在做很多我想让它做的事情

我还有一些非常酷的图表——一个商业HTML5图表库。我想利用我的bb木偶应用程序中的图表库

这是钥匙。我想在图表中显示的数据不是我的。这是纽约时报API()提供的竞选财务数据。它也是其他公共api中提供的其他数据

在我的脑海中,我想我只要将我的bb木偶数据模型连接到纽约时报提供的json URL,调用model.fetch(),解析返回的json数据,将数据绑定到我的图表,我就成功了。但无法获取数据,因为这是一个跨域请求-JavaScript中的一个no no。所以人们说“简单,只需实现cors”。不能那样做。我不控制纽约时报服务器,所以我不能在资源的标题中添加“允许访问控制”。我尝试使用的其他公共api也是如此。我认为“实现cors”是指“您”控制服务器的情况

所以其他人写“…你可以在你的网站上写一个服务器端包装,调用纽约时报API。然后你让你的客户端JavaScript调用你的包装。因为它们在同一个域上,你可以避免跨站点脚本问题

客户端代码-->服务器端包装-->NYT API

这在理论上是有意义的。当人们说“我们的API是公开的”时,这是像《纽约时报》、气象服务、金融数据服务等这样的API的发布者期望人们做的吗?这是假设的工作流吗?使用服务器应用程序并转发到你的木偶客户端应用程序?这是“bb木偶”吗“怎么办?关于所涉及的会议,我在这里遗漏了什么?如果不是通过客户端JavaScript调用(如model.fetch()),开发人员通常如何使用公共API


我的bb木偶应用程序的服务器后端是ASP.NET Web API。我应该如何将我的bb木偶模型连接到我自己的ASP.NET Web API,并让我的Web API调用纽约时报服务?我对一般的“公共API”原则的理解在这里并不牢固,因此我无法得出最佳实践

我认为他们称之为“公共API”是有道理的,因为它对每个用户都是开放的。无需使用特殊帐户或凭据登录

问题来自客户端,在本例中是浏览器。这是出于安全考虑。这并不是“Javascript中的禁忌”,您也可以在node.js环境中做到这一点

解决这个问题的方法是一种名为proxy的好方法,您可以从中获得有关它的更多详细信息。它被许多网站普遍使用

另一种方法是。大多数js libs/框架(如JQuery)都有一个包装器。它有一些限制,但不需要额外的服务器端代码即可完成


在您的案例中,我认为代理几乎是一种最佳实践(也许有更好的)。你可以很好地控制结果,处理错误,修饰它们,甚至在网页上保留它们。

当API提供商说他们的东西是公开的,但他们没有实现CORS时,您通常可以假设他们的意图是从您自己的服务器调用API,该服务器将根据需要进行身份验证和缓存,这样API密钥就不会暴露给用户,并且您的用户也不会利用过多的资源

我想我缺少的是像NYT这样的公共API的通用性。什么是预期的客户或使用它和其他类似的?他们显然希望其他人使用他们的服务和数据。他们显然知道浏览器同源策略。他们希望谁会使用他们的东西呢?World现在在浏览器中运行。我在浏览器中使用图表中的数据是否使用错误?或者其他服务器,比如我的ASP.NET Web API,确实是这些数据和服务的主要消费者吗?换句话说,我希望按照预期使用这些服务和数据。是吗?api只要求客户端可以发送http请求。他们肯定知道,许多用户将数据用于网页内容。但是作为一个服务提供商,你能做些什么呢?这是浏览器的安全行为。即使您可以禁用同源策略(大多数浏览器都有相应的配置),您的站点也会面临脚本注入风险。这几乎是每个API提供者都做的。检查Facebook提要api:。他们需要POST,在浏览器中,如果您跨越域,您几乎无法通过ajax发送POST。我认为“您的客户端代码-->您的服务器端包装-->NYT API”很好,而且是经得起未来考验的。谢谢Chris。我并不是说安全性会降低。我明白这个道理,并同意它。我更想看看其他面对风景的人会怎么做。下面是我要尝试的:木偶模型。fetch()调用Web API控制器。控制器调用纽约时报服务并获取数据(以前没有这样做过,需要研究)。控制器将json数据返回给木偶客户端,木偶客户端解析并告诉图表重新呈现。将在此处报告结果并进行相应标记。