所以我一直在尝试搜索,我似乎无法找到一个尝试做同样的好例子。 这是场景: 我有一个页面(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>
答案 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." );
});
}
现在它正确返回数据