使用PHP和Javascript / Ajax绕过CORS

我一直在努力解决这个问题几个小时,虽然我在网络开发方面没有受过教育而无法理解。 inheritance人:

另一个网站有一个脚本,他们从以下方式获取信息:

var url = "numbers.php"; parameters = "scoreid=" + document.getElementById('whatscore').value; parameters += "&num=" + document.getElementById('num1b1').value; xmlhttp2=GetXmlHttpObject(); if (xmlhttp2==null) { alert ("Your browser does not support XMLHTTP!"); return; } xmlhttp2.onreadystatechange = function() { if (xmlhttp2.readyState==4) { scorespot.innerHTML=xmlhttp2.responseText; // load setScores(document.getElementById('gradelvl').value); // set document.getElementById('submitscorebtn').style.display="none"; } } xmlhttp2.open("POST",url,true); xmlhttp2.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp2.setRequestHeader("Content-length", parameters.length); xmlhttp2.setRequestHeader("Connection", "close"); xmlhttp2.send(parameters); 

我试图做同样的事情,但是当我尝试它时,我得到了交叉原点错误。 我知道他们有办法用jsonp和其他东西来做,虽然我不知道从哪里开始为此。

当我尝试直接从他们的页面请求信息时,可以访问numbers.php页面,例如example.com/numbers.php?scoreid=131&num=41。 我总是返回“错误:参数语法不正确”。

任何人都可以告诉我如何解决这个问题吗? 我只熟悉PHP和Javascript,我很缺乏Ajax和其他东西或外部库。

我感谢所有的帮助! 注意:我无法访问WEBSERVER。

如果您无法访问您的服务器配置,并且您没有控制外部PHP脚本(假设它没有设置为反向代理),那么您绝对不能使用独立的 JavaScript解决方案。

相反,您必须从您自己的本地PHP脚本发出外部请求。 然后你可以从Ajax调用你的本地php脚本,这样你就可以访问本地文件了,因此不会违反CORS。

以下是通过本地PHP脚本进行Ajax调用的示例。

想象一下允许用户查找专辑名称的场景。 用户输入歌曲的名称和艺术家。 您向第三方API发出请求,并通过JavaScript警报通知将响应返回给用户。 对于此示例,假设用户输入“Black”和“Pearl Jam”作为歌曲和艺术家姓名

使用HTML的Ajax POST到本地PHP脚本示例:

       

Ajax to local PHP Script Example:

Artist: Song:

PHP GET

  

PHP POST(使用curl)

  

进一步阅读Ajax请求:
https://api.jquery.com/jquery.get/
https://api.jquery.com/jquery.post/

这可能有用: 如何通过JavaScript发送跨域POST请求?

此外,如果您不需要使用POST您可以使用jsonp (无需CORS设置)

这里最简单的解决方案是启用CORS ,假设您控制了您尝试访问的页面,您可以通过该站点详细说明的多种方式进行操作。 如果您尝试从与运行Javascript代码的页面相同的主机发出AJAX请求,此错误也将消失 – 在这种情况下,同一主机意味着来自同一个域(包括相同的子域)。

没有办法(使用XMLHttpRequest),如果您无法控制远程服务器

<请注意我投票的原因。

CORS引入了一种标准机制,可供所有浏览器用于实现跨域请求。 规范定义了一组标头,允许浏览器和服务器就允许(和不允许)哪些请求进行通信

出于易于理解的安全原因,从脚本内发起的跨站点HTTP请求受到众所周知的限制。 例如,使用XMLHttpRequest对象进行的HTTP请求受同源策略的约束。 特别是,这意味着使用XMLHttpRequest的Web应用程序只能向其加载的域发出HTTP请求,而不能向其他域发出HTTP请求。

这是规则。 即使你可能找到一种绕过它的方法,它有一天会被修复,只是因为这违反了规则