【问题标题】:wired error about sending a post request via ajax关于通过 ajax 发送发布请求的有线错误
【发布时间】:2021-11-03 00:52:18
【问题描述】:

我想通过 ajax 向 php 文件发出 post 请求,如下所示:

    $.ajax({
        type: 'POST',
        url: '/app/preload.php',
        data: {id: "testdata", directories: directories},
        dataType: 'json',
        cache: false,
        success: function(result) {
            if(preloadFirstTime === false) return; 
            console.log('result:', result);
            preload(result);
            preloadFirstTime = false;
        },
    });

但我收到此错误:

有线的事情是我可以下载带有错误地址的PHP文件:

我的意思是这个地址:

https://localhost:4000/app/preload.php

知道我做错了什么吗?

编辑:

我想我发现了为什么会发生这种情况我在我的 node.js 服务器中使用了它:

app.use('/app', express.static(__dirname + '/views/app/files'));

我认为这可以处理 get 请求,但 ajax 正在发送 post 请求!!!!

【问题讨论】:

  • 您尚未提供minimal reproducible example。如果 GET 请求和 POST 请求给出不同的结果,那么要么服务器处理这些不同请求的方式有所不同,要么你在某处打错了。
  • 为什么你给这个node.jsphp 加了标签,但问题中没有包含任何Node.js 或PHP 代码?这两种技术几乎从不结合使用(除非 Node.js 被用作客户端代码的构建工具,这将使其在此处基本上无关紧要)。
  • 这些调用之间还有另一个区别。 Ajax 请求使用https 调用本地主机,而浏览器的屏幕转储似乎使用http
  • 不...使用https我也可以下载文件...
  • 您如何提供您的 PHP 文件?网络服务器?或者您是否尝试通过 node.js 运行 PHP?如果您尝试通过 node.js 为它们提供服务,它将无法正常工作。节点无法解析 PHP。如果您使用的是 Web 服务器,则需要安装 PHP 支持。不应下载该文件。

标签: javascript php node.js


【解决方案1】:

static 中间件旨在提供静态文件。

静态文件不处理数据。向静态文件发出 POST 请求是没有意义的。

(您收到 404 错误而不是 405 可能被视为模块中的错误)。


PHP 不是 JavaScript。虽然有些模块可以通过 Node.js 执行 PHP,但您可以调查(请参阅 this question),但我不推荐它。

要么:

  • 更改为支持 PHP 的 HTTP 服务器
  • 用 JavaScript 重写 PHP 并将其注册到 app.post()router.post()

一边。 views 目录传统上是为将与a template engine 一起使用的模板保留的。任何试图维护您的代码以查找具有指定用于静态文件的名称的目录的人都会感到困惑。

【讨论】:

  • 静态文件不处理数据。因此,如果我将我的 PHP 文件移出静态文件夹,它应该可以正常工作吗?
  • 请注意,我从客户端调用 Ajax 请求...
  • @SaraRee — 不。如果您只是将它们移出静态文件夹,那么您将不会使用将它们用作静态文件的代码,相反,您将没有为它们提供服务的代码全部。
  • 您的声明与您的 Node.js 代码使用的模块完全不一致。它不应该起作用。
  • 没有。我说这是个坏主意(见第 4 段),而且你的方法行不通(见第 1 段和第 2 段)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多