【问题标题】:Why js XHR get code from php local file instead of executing it?为什么 js XHR 从 php 本地文件中获取代码而不是执行它?
【发布时间】:2019-07-08 18:08:06
【问题描述】:

我有 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);

【问题讨论】:

  • 你是如何运行 javascript 的?如果 javascript 在本地文件 file:/// 而不是 http:// 中运行,那么 ranking.php 也将通过该文件加载
  • 我在 3000 端口上运行本地 nodeJS 服务器 localhost:3000
  • 当你访问这个 javascript 时,url 是什么意思?
  • fx-team.fulara.com/team/adam/ss.png希望这个屏幕截图有帮助
  • 我对php了解不多,但是看起来你需要一个php服务器来运行代码,对吧?如果您的服务器是 nodeJS 服务器,您可能需要在 nodeJS 服务器上使用一些 PHP 库来使其能够运行 PHP 代码。你能发布更多关于你的 nodeJS 服务器设置的信息吗?

标签: javascript php node.js json xmlhttprequest


【解决方案1】:

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

查看下面的链接,了解如何使用内置 http 请求执行此操作。

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

【讨论】:

  • 好的,感谢您的澄清。我是这样做的,现在它可以工作了。我只是想知道为什么它是这样设计的
【解决方案2】:

请检查 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' : '' });
}

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多