неопределенная ошибка с ajaxcall для получения данных JSON - PullRequest
0 голосов
/ 24 июня 2009

моя проблема в том, что я не может решить эту проблему

Если я вызываю скрипт php, я получаю только неопределенную ошибку

это код, который я использую для тестирования И

это оригинальный код от создателя, который вызывает у меня головную боль

function startJsonSession(){     
    $.ajax({        url: "jsontest.php?action=startjson",       
        cache: false,     
        dataType: "json",   
         complete: function(data) {             
             username = data.username;               
              alert(username);      
         }    
    });
}

//phpscript

if ($_GET['action'] == "startjson") { startJson(); } 


    function startJson() {   

header('Content-type: application/json'); 
    $items = '';     
echo json_encode(array(          
     "username" => "bob",    
    "items" => array( "item1" => "sandwich",   
    "item2" => "applejuice"  
    )     
    )); 


 }

спасибо, Ричард

отредактировал мой вопрос, потому что:
эта функция возвращает данные JSON другим способом и поэтому решение, представленное ниже, не имеет такого же результата.

function startChatSession() {
    $items = '';
    if (!empty($_SESSION['openChatBoxes'])) {
        foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
            $items .= chatBoxSession($chatbox);
        }
    }


    if ($items != '') {
        $items = substr($items, 0, -1);
    }

header('Content-type: application/json');
?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php


    exit(0);
}

Ответы [ 4 ]

1 голос
/ 24 июня 2009

Я воссоздал твой код и понял это. Возвращаемый объект имеет тип XMLHttpRequest. У него есть свойство responseText, содержащее строку json с данными.

так что это работает ..

var decodedData = eval("(" + data.responseText + ")");
                username = decodedData.username;               
                      alert(username);      

Немного грязно, но это помогает: -)

p.s Если это поможет, я понял это с помощью firebug в firefox и установил точку останова в коде js

Отредактировано ниже: Не желая делать eval, вы можете использовать это, и это работает:

$.getJSON("json.php?action=startjson",       

            function(data) {             
                username = data.username;               
                      alert(username);      
             }    
        );

Отредактировано, чтобы показать, что я сделал с функцией успеха:

    $.ajax({        url: "json.php?action=startjson",       
            cache: false,     
            dataType: "json",   
             success: function(data) {             

                username = data.username;               
                      alert(username);      
             }    
        });
0 голосов
/ 25 июня 2009

В конце у меня все заработало.

Я установил firebug и увидел, что скрипт php возвращает html-заголовки вместо json.

Внезапно это начало работать, я действительно хотел бы знать, в чем проблема, но я не могу вам сказать.

В любом случае, спасибо, что так долго держался, Дэвид

0 голосов
/ 24 июня 2009

также я не понимаю, что он выходит из режима php, вместо того, чтобы возвращать его обратно, как это было сделано с xml

?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php

это то же самое, что и выше (массив объектов, содержащий буквенный массив)?

echo json_encode(array(          
             "username" => "bob",    
             "items" => $items
        )     
             ));  
 }
0 голосов
/ 24 июня 2009

Является ли имя пользователя глобальной переменной? Если нет, вы должны добавить ключевое слово "var".

username = data.username -> var username = data.username;

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