控制台告诉我......
阻止跨源请求:同源策略禁止在" example.com"中读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。
我已经在createCORSRequest函数和makeCORSRequest函数中创建了XHR对象。请求使用URL参数执行,该参数是一个PHP文件,其中包含允许从任何来源访问的代码。下面是来自CORS函数的位,然后是php文件。
// Create the XHR object
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// XHR for Chrome/Firefox/Opera/Safari
xhr.open(method, url, true);
}
else if (typeof XDomainRequest != "undefined") {
// XDomainRequest is for Internet Explorer
xhr = new XDomainRequest();
xhr.open(method, url);
}
else {
// CORS not supported.
xhr = null;
}
return xhr;
}
// Helper method to parse the title tag from the response.
function getTitle(text) {
return text.match('<title>(.*)?</title>')[1];
}
function makeCORSRequest() {
var url = "example.com/directory/file.php";
var xhr = createCORSRequest("POST", url);
if (!xhr) {
console.log("CORS not supported");
return;
}
//Response Handlers.
xhr.onload = function() {
var text = xhr.responseText;
var title = getTitle(text);
console.log("Response from CORS request to " + url);
};
xhr.onerror = function() {
console.log("Whoops, there was an error making the request.");
};
php文件
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); //{$_SERVER['HTTP_ORIGIN']} can be changed to specific sites to allow access
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
这里的整体gyst是页面1加载并且来自该页面1的数据被写入XML文件,当点击到不同服务器上的页面2的超链接时,用户可以提交解析XML文件的表单特定节点。包含CORS请求和PHP文件的javascript文件都是在加载第1页时访问的。代码本身似乎都运行正常,除了2个地方......
在第2页,解析XML文件的javascript中包含jQuery,我收到一条错误消息:
TypeError:$(...)。validate不是函数
据我所知,这是一个合法的功能。控制台中的此错误在CORS阻止通知之前出现,因此不确定它是否起作用。