使用.load jQuery返回php脚本

时间:2015-10-02 14:25:40

标签: php jquery ajax

所以我一直在尝试搜索,我似乎无法找到一个尝试做同样的好例子。 这是场景: 我有一个页面(php和html)在加载时运行一个包含的PHP脚本(currentMonth.php)。 在页面上我有一个应该替换currentMonth.php生成的内容与另一个脚本的内容,previousMonth.php

脚本本身只更改2个变量,这些变量在较大的脚本(Google Calendar Api)中使用。 脚本如下所示:

CurrentMonth.php

<?php
require_once 'getEvents.php';   

if(isset($_SESSION['eventMonth'])) {
    $dateMonth = $_SESSION['eventMonth'];

}else {
    $currentDate = date(DateTime::ATOM);
    $date = DateTime::createFromFormat("Y-m-d\TH:i:sP", $currentDate);
    $dateMonth = DateTime::createFromFormat("Y-m-d\TH:i:sP", $currentDate)->format("n");
}
$month = $dateMonth;
$monthStart = $month -1;
$_SESSION['eventMonth'] = $month;
getEvents($monthStart, $month);

?>

previousMonth.php脚本只是简单地将月份减去1。

现在到实际问题: 我希望能够在不重新加载页面的情况下运行脚本(AJAX)。 据我所知,jQuery函数.load()很合适。 但问题是没有返回任何内容。我已经在我的浏览器中检查了日志并且发出了请求,但它没有替换数据。 jQuery看起来像这样:

function previousMonth() {

    $('#events').load('/paycheck/scripts/previousMonth.php');

}

使用

中的内联onclick()事件调用该函数

在jQuery文档中,它指出.load()从加载的脚本返回html。 我的getEvents脚本生成的内容返回html,注入了php,如下所示:

<div class="event-container">
            <div class="eventBody">
                    <span class="eventIcon"><div id="iconHolder"></div></span>
                    <span class="name"><?php echo $event->summary; ?></a></span>
                    <span class="date"><?php echo $newday; echo('. '); echo $newmonth;  ?></span>
                    <span class="time"><?php echo $newTimeStr; echo(' - '); echo $newTimeEnd; ?></span>
                    <span class="diff"><?php echo($count); ?></span>
                    <span class="pay"><?php echo(round($final,2)); ?></span>
                    <span class="more"><p id="expand">Mere info<p></span>
            </div>
</div>

所以要了解实际问题。 我很确定我在这里误解了一些东西,但我想我现在非常盲目。 那么我如何使用jQuery和AJAX来运行一个php脚本,它返回一个html主体,然后用新的内容替换当前显示的内容? 的修改 getEvents.php 此脚本从Google Api获取信息,然后计算一些付款。这些存储在变量中,然后在html体内回显。

更新1 脚本中的内容应显示在此

<div id="events">
    <?php include($_SERVER['DOCUMENT_ROOT'].'/paycheck/scripts/currentMonth.php'); ?>
</div>

2 个答案:

答案 0 :(得分:0)

如果您可以在浏览器中导航到CurrentMonth.php并显示所需的HTML('.event-container'及其内容),那么您应该能够使用$ .load()来检索和显示它。 getEvents()函数有什么作用?它是返回HTML还是回显?如果它返回HTML,则必须将getEvents($monthStart, $month);替换为echo getEvents($monthStart, $month);。如果您只希望它与AJAX调用一起回显,您可以将其包装在子句中。我最喜欢的是:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) === true && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
    // Your AJAX-specific code here
}

最佳做法是拥有一个处理AJAX的单独PHP文件。这个文件可以只是include('CurrentMonth.php');,并使用上面列出的方法回显内容。

答案 1 :(得分:0)

我不确定.load()后面没有返回数据的原因是什么,但我使用了.get()而不是这样:

function previousMonth() {
    $.get( "/paycheck/scripts/previousMonth.php", function( data ) {
      $( "#events" ).html( data );
      alert( "Load was performed." );
    });

}

现在它正确返回数据