JavaScript无法在localhost上找到php文件

时间:2019-07-02 17:37:48

标签: javascript php

我正在尝试将字符串数据发送到localhost:8080上的php脚本中进行保存,但是Javascript函数无法找到php文件并给出404错误。

这是Javascript:

var data = new FormData();
data.append("data" , myStringData);
var xhr = new XMLHttpRequest();
xhr.open('POST', "http://localhost:8080/Source/ServerInputManager.php", true);
xhr.send(data);

这是ServerInputManager.php脚本:

<?php
if (!empty($_POST['data'])) {
    $data = $_POST['data'];
    $fname = "NewFile.txt";

    $file = fopen($fname, 'w'); // Creates new file
    fwrite($file, $data);
    fclose($file);
}
?>

我知道php文件存在,因为我可以从chrome中的URL下载它。我也可以使用该URL通过GET请求读取内容。但是,每当我尝试使用POST时,都会出现404错误。我没有使用任何PHP库,但正在使用node运行server.js脚本。

这是文件结构:

|- index.html
|- index.css
|- server.js (ran by node)
+- Source
   |- InputManager.js (contains the javascript code)
   +- ServerInputManager.php (contains the php code)

我也尝试过使用以下目录:

http://localhost:8080/Source/ServerInputManager.php
http://localhost:8080/ServerInputManager.php
localhost:8080/Source/ServerInputManager.php
localhost:8080/ServerInputManager.php
/Source/ServerInputManager.php
Source/ServerInputManager.php
/ServerInputManager.php
ServerInputManager.php

但是他们都给出了404错误。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

我猜这个js文件在客户端浏览器上运行,并且由包含您的php应用程序的同一服务器提供。

如果是这种情况,那么您应该在服务器端公开一个终结点,该终结点期望对某些URL(例如/input)进行POST请求。

然后您的js代码应为:

xhr.open('POST', "/input", true);
xhr.send(data);

请记住:您不直接向php文件执行POST请求,而是向与php一起使用的服务器执行POST请求。服务器应在/ input上接收POST请求,并将该请求的处理委托给ServerInputManager.php(或将所有请求委托给ServerInputManager.php,仅在/ input上处理POST请求)。

希望这会有所帮助

答案 1 :(得分:0)

要回答我自己的问题,

我发现Randy Casburn的评论最有用

  

您在Express路由器设置中没有到/Source/ServerInputManager.php的POST“路由”。

尽管我没有完全解决问题,但我找到了另一种方法来获得相同的结果。

这是新的Javascript代码:

<resource-limit-settings>
   <resource-limit-setting match="myUser">
      <max-queues>3</max-queues>
   </resource-limit-setting>
</resource-limit-settings>

这是我添加到server.js脚本中的内容:

fetch("http://localhost:8080/targetInput", {
    method: 'POST',
    body: myStringData,
}).then(response => {
    console.log(response);
})

不再使用php文件。