Ajax调用只能在php文件中运行,而不能直接使用url

时间:2017-11-30 15:09:16

标签: javascript php ajax url

我的网页存在问题,无法从REST服务器数据中绘制图表。 我的代码正在工作,如果我用php文件中的url做一个简单的file_get_contents我的ajax调用。 但是,如果我想直接使用url,那么对rest服务器的调用可以正常工作,但是ajax会返回Object对象。

这是有效的:

jsonData=$.ajax({
      url: "getData.php",
      dataType: "json",
      data: text,
      async: false
      }).responseText;
document.getElementById("demo2").innerHTML =jsonData;

这不起作用

    jsonData=$.ajax({
      url: ""+text+"",
      dataType: "json",
      async: false
      }).responseText;
document.getElementById("demo2").innerHTML =jsonData;

这是我的getData.php:

$string = file_get_contents("http://localhost:5000/'Pi%202'/5/temperature/11.27.2017%2010:00/11.28.2017%2023:00");

echo $ string;

该文本包含正确的url,因为对其余服务器的get查询是成功的。 两者都在休息服务器上进行get,但在第二个jsonData中是Object对象。如果我删除responseText我得到一个undefined而不是Object对象。 我已经为这个问题尝试了很多种解决方案,我尝试过成功功能的东西,这根本没有给我答案。 我已经坚持这个问题超过2天,这是我整个项目工作的最后一部分,我认真考虑放弃或扔掉我的电脑。 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在对该问题的评论主题进行了大量讨论后,我们似乎确定了该问题。为了澄清未来的读者,问题中的两个AJAX请求是不是相同的东西。他们向截然不同的网址发出请求。

  • 一个是向托管的PHP应用程序发出请求,该应用程序在内部向另一个站点发出自己的HTTP请求并返回响应。
  • 另一个是尝试直接向其他网站发出跨域AJAX请求。当然,这是一个标准的CORS错误。

专门解决评论主题中的问题......

  

为什么我不需要它来自php文件

因为PHP没有在网络浏览器中运行。它在服务器上运行的应用程序代码。这使得它在架构上与Web浏览器本身没有什么不同,当然,它们可以发出HTTP请求。没有理由在那里强加跨性别限制。

  

我的浏览器不允许我访问

正确。这是一种防止站点利用跨源请求的安全措施。 (想象一下,例如,一个嵌入JavaScript的网站,向所有主要银行网站发出AJAX请求,希望您当前登录到其中一个。)

  

有没有办法完全禁用这项检查?

编写自己的网络浏览器。试图说服您的用户下载并运行您的Web浏览器而不是行业标准的浏览器存在困难。如果您的网络浏览器的主要吸引人的功能是用户可能会遇到潜在的跨源请求攻击,那么这将是一次特别困难的销售。

基本上,您在Web应用程序开发中遇到了很常见的事情。好消息是,您已经拥有了正在尝试做的工作版本。你的第一个版本。您可以将AJAX请求发送回您自己的服务器端应用程序,服务器端应用程序可以依次向您喜欢的外部服务发出任何请求。

答案 1 :(得分:0)

在REST服务器的情况下,解决方案非常简单。

只需添加对python flask rest app的cors支持即可。

只需将这些行添加到其余服务器:

from flask_cors import CORS
CORS(app)

因为我认为我的代码或我正在使用的方法已经足够好了,问题来自于我对COrs一无所知,而我的休息服务器在本地运行时需要它。