Вызов jQuery AJAX возвращает результаты до заголовков страниц, что приводит к ошибке синтаксического анализа

Я пытаюсь создать простой вызов AJAX с использованием JSON, но я продолжаю получать ошибку синтаксического анализа результата, и когда я проверяю resultText, он показывает исходный код всей страницы, а ответ JSON показывает успех над заголовками страницы.

Вот мой вызов AJAX, где #class — это поле выбора со значениями.

$("#class").change( function () {
            if($('#class').val().length > 0){

                    $.ajax({

                        type: "GET",
                        url: "http://192.168.0.9/ajax",
                        data: 'class_id=' + $("#class").val(),
                        datatype: 'json',
                        async: 'true',
                        beforeSend: function() {
                            alert("Before send!");
                        },
                        success: function(result){
                           if (result.status){

                                $('#result').html(result);
                         } else {
                            alert('request unsuccessful!'); 
                         }

                        },
                        complete: function() {
                            alert("Complete!");

                        },
                            error: function (request,error) {
                             alert('A jQuery error has occurred. Status: ' + error +':'+ request.responseText);                           
                             $("#result").html(request.responseText);  


                        }
                    });                   
            } else {
                alert('Please make a selection');
            }           
            return false; 

            }); 

Это моя функция PHP, которая возвращает результат

$result = array();
    $result['status'] = "success";
    $result['message'] = "Types";
    header("Content-Type: application/json; charset=utf-8", true);
    echo json_encode($result);

Наконец, это ответ, который я получаю в своем предупреждении об ошибке:

A jQuery error has occurred status:parseerror
{"status":"success", "message":"Types"}<!DOCTYPE html>
<html>
...rest of my page from where the request was sent

Я надеюсь, что это простая ошибка, и кто-нибудь может сказать мне, что я делаю неправильно?


person Matt Drake    schedule 10.04.2014    source источник
comment
Является ли страница, на которой расположена ваша функция, той же страницей, которую вы изначально загрузили? Что произойдет, если вы просто поставите exit(); после оператора echo?   -  person jeroen    schedule 10.04.2014


Ответы (2)


Возможно, ваш параметр следует передать в формате JSON:

data: "{'class_id':'" + $("#class").val() + "'}",
person Ellen Tan    schedule 10.04.2014
comment
Спасибо, Эллен, теперь я продвинулся немного дальше с вашим предложением. Ошибка синтаксического анализа исчезла, и теперь она возвращает успех, однако результат.статус возвращается как «неопределенный», поэтому теперь я получаю предупреждение о неудачном запросе вместо данных. Любые идеи? - person Matt Drake; 10.04.2014
comment
Я действительно нашел связанный пост stackoverflow.com/questions/14568173 / - person Matt Drake; 10.04.2014

Попробуйте удалить datatype:'json' из Javascript и header("Content-Type: application/json; charset=utf-8", true); он должен распознать себя

person TooShyToAsk    schedule 10.04.2014