Javascript 我的独立php文件如何从ajax post接收数据?
所以我有3个文件。Header.php、script.js和load_more.php。php是网站上的普通首页,script.js是一个被调用并发出ajax请求的文件。load_more.php是脚本在script.js中调用的php文件 header.php:我获取页面Id($schoolofficialId)并将其放入javascript变量中,以便在script.js ajax数据中访问:Javascript 我的独立php文件如何从ajax post接收数据?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,所以我有3个文件。Header.php、script.js和load_more.php。php是网站上的普通首页,script.js是一个被调用并发出ajax请求的文件。load_more.php是脚本在script.js中调用的php文件 header.php:我获取页面Id($schoolofficialId)并将其放入javascript变量中,以便在script.js ajax数据中访问: <?php // There is more code to this but I do g
<?php
// There is more code to this but I do get the page ID and put it into $schoolOfficialId so this does work
$shcoolOfficialId = $specificSchool[0]["id"];
?>
<!--Down in the <head> of the DOM where scripts get included-->
<script type="text/javascript">
var schoolId = <?php Print($shcoolOfficialId); ?>
</script>
<script type="text/javascript" src="js/script.js"></script>
load_more.php:由于我的应用程序越来越大,我需要执行switch语句,因此我需要js变量schoolId在header.php中的php代码中为我提供当前页面id或$schoolOfficialId。注意:我不想将load_more.php包含到我的DOM中,因此它是一个独立的php文件:
// including the config file
require('config.php');
//pdo connct for config.php file
$pdo = connect();
var_dump($schoolId);
//this var dump returns NULL
switch ($schoolId) {
case 1:
echo "first school";
break;
case 2:
echo "second school";
break;
default:
//this default ends up happening because the $schoolId is NULL
echo "no school";
break;
}
您的
schoolId
实际上是null
,因为您无法在JS中回显php值(就像您所做的那样)。我建议您在html中使用一个隐藏的输入字段,并在输入的值
属性中回显该值,然后使用jQuery获取该值
<!-- In your html code -->
<input type='hidden' id='schoolOfficialId' value='<?php echo $schoolOfficialId; ?>' />
您需要做的第一件事是确保数据到达php脚本。
在load_more.php中执行以下操作:
$school_id = $_POST[schoolId];
var_dump($school_id);
冲洗并重复最后一个\u id
下一步,如果您为不同的操作使用相同的PHP脚本,您可能需要调整逻辑,并考虑使用这种方法:
在您发送给php脚本的每个ajax调用中,至少包含两个参数,一个称为“action”或类似参数,这将在您的切换案例中使用。
另一个“值”或类似值,可以是您的id。
如果需要,可以添加更多,例如限制和偏移
ajax调用示例:
$.ajax({
url: 'load_more.php',
type: 'POST',
data: {param:schoolId,action:"initialCall"},
});
$.ajax({
url: 'load_more.php',
type: 'POST',
data: {param:last_id, limit:limit,action:"loadMore"},
});
php脚本示例
// including the config file
require('config.php');
//pdo connct for config.php file
$pdo = connect();
// if POST is not set give a default value for $school_id
if (!isset($_POST['school_id'])) $school_id = 1;
else $school_id = $_POST[school_id];
//same for action
if (!isset($_POST['action'])) $action = 'initialCall';
else $action = $_POST['action'];
switch ($action) {
case "initialCall":
//take action for first ajax call;
break;
case "loadMore":
//take action for second ajax call;
break;
default:
//take default action
break;
}
您的问题不是很清楚loadmore.php文件到底是什么,您的意思是“我不想将其包含到我的DOM中?”php是服务器端代码,DOM是文档对象模型。这通常是在浏览器中转换成节点树的HTML。啊,好的,我明白了,我遵循了你所做的,它工作了,但我仍然有第一个ajax调用相同的错误。My console.log错误显示:未捕获引用错误:未定义学校ID。第16行是数据:{schoolId:schoolId}部分。有什么问题吗?在schoolId
变量初始化后,您是否遵循了对ajax的调用?console.logschoolId
以查看它是否具有预期的值。因此,我使用以下var schoolId=$(“#schoolOfficialId”).val()获取id:
然后使用以下命令将其转换为整数:var schoolId2=parseInt(schoolId)代码>。我甚至进入我的控制台,检查变量schoolId2,它输出id,但现在我无法将其加载到load_more.php;我的ajax数据如下所示:数据:{schoolId:schoolId2}
和load_more.php:if(isset($\u GET['schoolId']){echo“yesss”;}否则{echo“nope”;}
它一直输出nope:(如果使用POST方法通过AJAX发送数据,则只能使用$\u POST
数组访问数据,而不能使用$\u GET
。尝试更改它以查看它现在是否已定义。同时,您不需要将schoolId
转换为整数,因为php将知道要使用的类型。确定my schoolIdvar schoolId=$(“#schoolOfficialId”).val()
MyAjax数据:$.ajax({url:'load_more.php',键入:'POST',数据:{schoolId:schoolId},成功:函数(数据){console.log(“working”);});
和load_more.php:if(isset($\u POST['schoolId']){echo“yesss”}否则{echo“nope”}
我仍然没有收到任何消息,但console.log日志“正常”:(
$.ajax({
url: 'load_more.php',
type: 'POST',
data: {param:schoolId,action:"initialCall"},
});
$.ajax({
url: 'load_more.php',
type: 'POST',
data: {param:last_id, limit:limit,action:"loadMore"},
});
// including the config file
require('config.php');
//pdo connct for config.php file
$pdo = connect();
// if POST is not set give a default value for $school_id
if (!isset($_POST['school_id'])) $school_id = 1;
else $school_id = $_POST[school_id];
//same for action
if (!isset($_POST['action'])) $action = 'initialCall';
else $action = $_POST['action'];
switch ($action) {
case "initialCall":
//take action for first ajax call;
break;
case "loadMore":
//take action for second ajax call;
break;
default:
//take default action
break;
}