我正在尝试将字符串数据发送到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错误。我在做什么错了?
答案 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文件。