我的独立php文件如何从ajax后接收数据


How can my standalone php file recieve data from ajax post?

所以我有3个文件。Header.php, script.js和load_more.php。header .php是网站上正常的头页,script.js是一个被调用并发出ajax请求的文件。Load_more.php是脚本在script.js中调用的PHP文件。

header.php:我得到页面Id($ school官方Id),并把它放入javascript变量中,在script.js ajax数据:

<?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>

script.js: ajax调用的地方。第二个ajax请求可以,但第一个ajax有点困惑我想把js变量schoolId推到load_more。php

            // execute an ajax query to push id of page to load_more.php
            $.ajax({
                url: 'load_more.php',
                type: 'POST',
                data: {schoolId:schoolId},
                success:function(data){
                }
            });
            // execute an ajax query to load more statements
            $.ajax({
                url: 'load_more.php',
                type: 'POST',
                data: {last_id:last_id, limit:limit},
                success:function(data){
                    // now we have the response, so hide the loader
                    $('#loader').hide();
                    // append: add the new statments to the existing data
                    $('#items').append(data);
                    // set is_loading to false to accept new loading
                    is_loading = false;
                }
            });

load_more.php:因为我的应用程序越来越大,我需要做开关语句,所以这就是为什么我需要js变量schoolId给我带来当前页面id或$ school官方id在header.php php代码:注意:我不想包括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和回显的值在输入的value属性,然后得到使用jQuery的值。

 <!-- In your html code -->
 <input type='hidden' id='schoolOfficialId' value='<?php echo $schoolOfficialId; ?>' />

然后,您可以获得该输入的值如下:

<script type="text/javascript">
   $(function(){
        var schoolId = $('#schoolOfficialId').val(); //now you do have the value of the schoolOfficialId variable here.
   });
</script>

注意$(function() ...行,这意味着脚本将在文档准备好后加载

首先要做的是确保数据到达php脚本。
在你的load_more.php中这样做:

$school_id = $_POST[schoolId];
var_dump($school_id);

冲洗并重复last_id

接下来,如果您使用相同的php脚本执行不同的操作,您可能需要稍微调整一下逻辑,并考虑使用以下方法:

在每个ajax调用你发送到php脚本包括至少两个参数,一个叫做"动作"或类似的,这将在你的开关情况下使用。
另一个"value"或类似的,可以是你的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;
}