Проблема получить JSON после вызова AJAX - PullRequest
2 голосов
/ 06 мая 2011

Я сделал функцию AJAX с помощью jQuery. Функция работает правильно, и сервер возвращает JSON, но я не могу использовать его в своем скрипте JS

Серверная сторона:

$array = array();

$array["count"] = count($accounts_list)."";

    for($i=0; $i<count($accounts_list); $i++)
    {
        $account = $accounts_list[$i];

        $array["marker"]["name"] = $account->name;
        $array["marker"]["lat"] = $account->map_latitude;
        $array["marker"]["lon"] = $account->map_longitude;
    }

    echo json_encode($array);

Клиентская сторона:

$.ajax({  
    type: "POST",  
    url: "index.php?module=cap_Maps&action=AddMarkers", 
    data: dataString, 
    dataType: "json",
    success: function(data) {
        if (data == "error"){
            $(".tr_legend").before("<tr><td colspan='2' id='error'><span class='error_maps'>Erreur lors du chargement des marqueurs</span><td><tr>");
        }
        else {
            alert(data);
                var obj = jQuery.parseJSON( data )
                alert (obj.count);
        }

    }  
});

JSON возвращается сервером:

{"count":"371","marker":{"name":"WAMPFLER","lat":"49.02751610","lon":"2.10611230"}}

Функция alert(data) возвращает мой JSON, но если я попытаюсь разобрать его с jQuery.parseJSON( data ), он не будет работать и alert(obj.count); не откроется.

EDIT

Я добавил функцию ошибки:

error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
                },

И произошла ошибка:

XMLHttpRequest={"count":"358"}
textStatus=parsererror
errorThrown=Invalid JSON: {"count":"358"}

EDIT

Если в моем AJAX было contentType: "application/json",, я могу вернуть статическую строку, которая считается json, но если я попытаюсь выполнить другой php-код на моем сервере, AJAX вернет 500 Internal server error

Ответы [ 5 ]

1 голос
/ 06 мая 2011

Попробуйте:

var json = jQuery.parseJSON('{"count":"371","marker":{"name":"WAMPFLER","lat":"49.02751610","lon":"2.10611230"}}');

alert(json.count);

возможно, вы забудете дать строку '' для parseJSON.

0 голосов
/ 10 мая 2011

Выходной буфер не пустой, поэтому AJAX получил содержимое буфера + JSON, поэтому он не был действительным JSON.

Я использую ob_clean() на стороне сервера непосредственно перед выводом моего JSON, и это решает проблему.

0 голосов
/ 09 мая 2011

Похоже, вы не отправляете JSON в правильном формате с вашего сервера, попробуйте использовать функцию json_encode () .

0 голосов
/ 09 мая 2011

вместо использования parseJson вы можете попробовать просто использовать eval.

$.ajax({  
    type: "POST",  
    url: "index.php?module=cap_Maps&action=AddMarkers", 
    data: dataString, 
    dataType: "text",
    success: function(data) {
        if (data == "error"){
            $(".tr_legend").before("<tr><td colspan='2' id='error'><span class='error_maps'>Erreur lors du chargement des marqueurs</span><td><tr>");
        }
        else {
            alert(data);
                var obj = eval(data);
                alert (obj.count);
        }

    }  
});

HTH.

0 голосов
/ 06 мая 2011

С jQuery.ajax:

Тип json анализирует извлеченный файл данных как объект JavaScript и возвращает построенный объект как данные результата.

Так что вам не нужно jQuery.parseJSON, так как возвращаемая строка уже проанализирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...