首页 > 解决方案 > 无法 POST 成功的 ajax 请求

问题描述

我的存储库中有 2 个文件,我想将 index.php 中的 js 变量传递给 php 脚本 validate.php。我的存储库的结构:

index.php 中的代码:

<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
The content of the document......
<script type="text/javascript">

var name = "virginia"
//console.log(name)

$.ajax({
    url: "../pdf/validate.php", 
    method: "post", 
    data: name, 
    success: function(res) {
        console.log(name)
        console.log("pass js variable to php: success")
    }

});  

// open localhost/index.php
// open F12 developer console, you will find 'virginia' was passed to validate.php, because it console-prints "pass js variable to php: success". 

</script>
</body>
</html>

ajax 请求成功验证.php。但是,转到 validate.php,我有:

<?php 
$var1 = $_POST['name']; 
echo($var1); 
?>

如果我在 localhost 中打开 validate.php,我会收到错误消息:注意:未定义的索引:名称。

为什么?

标签: javascriptphpjqueryajax

解决方案


ajax请求成功验证.php

没那么成功。

您没有正确格式化数据以供 PHP 解析它。

您应该将具有name属性的对象传递给数据。

data: { name }, 

如果您检查过res而不是name使用console.log.


如果我在 localhost 中打开 validate.php,我会收到错误消息:注意:未定义的索引:名称。

通过在浏览器中键入 URL,您将发出一个的GET 请求,该请求与您之前使用 JavaScript 发出的 POST 请求完全无关。

第一个请求的 POST 数据在第二个请求中不存在。


如果您希望数据在请求之间持久存在,那么您需要将其存储在某处(例如会话或数据库)并添加逻辑以区分设置和检索数据(例如,将请求设为 POST 或 GET)。


推荐阅读