我通过HTML表单调用在线API,该表单会发送课程时间表。我在初始页面加载时填充时间表,然后使用jQuery和AJAX来获取过滤类。
我遇到的问题是我的AJAX功能无法识别作为JSON发送的数据。我确保在PHP函数中使用'json_encode'发回数据,并且jQuery中的'dataType'是'json'。 因此,AJAX函数中的'success'回调中没有运行代码。这是我的代码:
AJAX:
jQuery(document).ready(function() {
jQuery(document).on("change", "#calendar-filter-form select", function() {
jQuery.ajax({
type : 'POST',
dataType : 'json',
data : jQuery("#calendar-filter-form").serialize(),
url : "<?php echo $_SERVER['PHP_SELF']; ?>",
success : function(data) {
if(data) {
alert("test");
var html = "";
jQuery(data.results).each(function(i, v) {
alert(v);
html += '<div class="day">';
html += '<h3>' + v.day + '</h3>';
jQuery(v).each(function(i2, v2) {
html += '<div class="activity-item">';
html += '<h4>' + v2.SessionName + '</h4>;'
html += '<p class="session-time">Time: ' + v.Time + 'Start</p>';
html += '<p class="remaining-capacity">Remaining Spaces: ' + v.RemainingCapacity + '</p>';
html += '</div>';
});
html += '</div>';
});
jQuery("#calendar").html(html);
}
}
});
});
});
正在调用API并返回数据的PHP:
if(isset($_POST['filterClasses'])) {
$url = '/classes/search?FacilityId=1';
$options = array();
foreach($_POST as $key => $postItem) {
if(!empty($postItem)) {
$url .= "&ActivityName=" . urlencode($postItem);
$options['url'] = $url;
}
}
$results = makecURLRequest($options);
$resultsSorted = array();
$resultsDecoded = json_decode($results);
$filters = array();
$resultsSorted = array();
$days = array('Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Friday' => 7);
foreach($days as $key => $day) {
$resultsSorted[$day] = array();
$resultsSorted[$day]['day'] = $key;
foreach($resultsDecoded as $result) {
if($result->DayOfWeek == $day) {
$timestamp = strtotime($result->Time);
array_push($resultsSorted[$day], $result);
}
}
}
header('Content-Type: application/json', true);
echo json_encode(array("results" => $resultsSorted));
}
以下是来自API的返回JSON:
[
{
"ActivityInstanceId":11959,
"FacilityId":1,
"SessionName":"Swim Scheme Lessons",
"GroupId":null,
"DayOfWeek":4,
"Time":"2014-01-23T16:00:00",
"RemainingCapacity":1,
"Description":null,
},
{
"ActivityInstanceId":11959,
"FacilityId":1,
"SessionName":"Swim Scheme Lessons",
"GroupId":null,
"DayOfWeek":4,
"Time":"2014-01-23T16:00:00",
"RemainingCapacity":1,
"Description":null,
},
...
我似乎无法理解为什么这不被认为是有效的JSON。谁能指出我正确的方向? 感谢
答案 0 :(得分:1)
你的json无效。
{
"ActivityInstanceId":11959,
"FacilityId":1,
"SessionName":"Swim Scheme Lessons",
"GroupId":null,
"DayOfWeek":4,
"Time":"2014-01-23T16:00:00",
"RemainingCapacity":1,
"Description":null ***,***
},
应该是:
{
"ActivityInstanceId":11959,
"FacilityId":1,
"SessionName":"Swim Scheme Lessons",
"GroupId":null,
"DayOfWeek":4,
"Time":"2014-01-23T16:00:00",
"RemainingCapacity":1,
"Description":null
},
并且最后一个元素不需要“,”。
并尝试添加
if(data) { data = JSON.parse(data ) }
在你的js中。 它假设工作。
答案 1 :(得分:0)
我弄清楚发生了什么。我正在将AJAX请求提交到同一页面(对于html标签上面的php)并且它试图再次重新加载整个页面,包括在初始页面加载时发送的php变量。这导致AJAX功能无法正常工作。 我通常在MVC框架内工作,而不是这次,所以它让我失望了。 希望这会有所帮助。