为什么JS XHR从php本地文件获取代码而不是执行它?

时间:2019-07-08 18:08:06

标签: javascript php node.js json xmlhttprequest

我有nodejs服务器,并且在客户端上以避免CORS错误,我有一个带有file_get_contents的php文件,该文件回显了来自不同域的json

<?php
$json = file_get_contents('http://localhost/pixi/multidymy/getRanking.php');
echo $json;

问题是我的js正在获取php代码而不是json(未执行php代码)。如果我从URL打开php文件,则可以正常工作。我是否缺少一些标题?这是怎么回事?控制台中没有显示错误

const ranking = document.getElementById("ranking");
let xhr = new XMLHttpRequest();
xhr.open("GET", "/ranking.php", true); //<-- its in the local folder
xhr.addEventListener('load', function() {
    if (this.status === 200) {
        console.log('Result:');
        console.log(this.responseText);
        ranking.innerHTML = this.responseText;
    } else {
        ranking.innerHTML = "error";
    }
})
xhr.send(null);

2 个答案:

答案 0 :(得分:0)

您的XMLHTTPReqest已通过端口3000发送到NodeJS服务器。您的php在端口80下。最后,您的响应来自nodejs和运行php的服务器。由于跨站点脚本编写,您无法更改XMLHttpReqest的端口。我建议您使用nodejs通过http请求检索文件。

检查下面的链接,了解如何使用内置的http请求。

https://nodejs.org/api/http.html

答案 1 :(得分:-1)

请检查一下nodeJs代码,并将以下行放入服务调用中。

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type, sessionid");
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

例如函数名称,例如 getAllData

getAllData(req, res) {

    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type, sessionid");
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    .
    .

    .
    res.json({ 'IsSuccess' : false, 'StatusCode' : 500 , 'Message' : err.message, 'Data' : '' });
}