AJAX函数无法识别json返回

时间:2014-01-20 18:59:36

标签: php jquery ajax json

我通过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。谁能指出我正确的方向? 感谢

2 个答案:

答案 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框架内工作,而不是这次,所以它让我失望了。 希望这会有所帮助。