Использование jquery ajax для вызова функций php - странная проблема из предыдущего ответа

0

Вот решение, которое я использую. Проблема объясняется ниже.

Я не понимаю, почему .getJSON() не работает. Я компенсирую использование .post() которое возвращается как строка вместо JSON.

$.post('test.php', { action: 'test' }, function(data, status){

    console.log(jQuery.parseJSON(data)); //form the JSON from a string after the POST

});

В настоящее время он отлично работает, но больше внимания уделяет браузеру и конечному пользователю. Возможно, на самом деле это будет лучше для крупномасштабного развертывания, чтобы сэкономить немного серверного процессора? В любом случае. Странная небольшая ошибка.



Я использовал этот предыдущий ответ, чтобы начать с того, что я делаю: используя jquery $.ajax для вызова функции PHP

и дважды проверили мое основное использование против: http://api.jquery.com/jQuery.getJSON/ и http://api.jquery.com/jQuery.post/

У меня есть полный успех с $.post, но при использовании $.getJSON даже не возвращается статус.

Для уточнения: я редактирую эти функции, чтобы задать вопрос. Я тестирую с использованием json-данных, которые я уже обрабатывал. Я просто добавляю возможность вызова php-функций через запросы ajax. Не отбрасывайте мой странный php echo json_encode. Мои рабочие данные проверяются.

В любом случае, вот..Js:

$.post('test.php', { action:'test' }, function(data, status){
    console.log(data); //{"test_result":"success"}
    console.log(status); //success
});

$.getJSON('test.php', { action:'test' }, function(data, status){
    console.log(data); //nothing
    console.log(status); //nothing
}).fail(function( jqxhr, textStatus, error ) {
    console.log(textStatus); //parsererror
    console.log(error); //SyntaxError: Unexpected end of input
});

и мой.php:

<?php
    try {
        if(isset($_POST['action']) && !empty($_POST['action'])) {
            $action = $_POST['action'];
            switch($action) {
                case 'test':
                    echo json_encode(array('test_result' => 'success'));
                    break;
            }
        }
    } catch(Exception $e) {
            echo "ERROR: " . $e->getMessage();
    }
?>

Это успешно выполняется как $.post, но когда я переключаюсь на $.getJSON, он больше не функционирует. Есть ли простая причина?

  • 0
    Я нашел много сообщений о том, что это не удается, потому что данные недействительны в формате JSON, но я проверяю свои данные в браузере, а затем копирую / вставляю на jsonlint.com для проверки, и он говорит, что все в порядке. Я действительно потерян.
Теги:

1 ответ

0

Ваш файл test.php создает плохой формат JSON, и getJSON терпит неудачу, я предлагаю вам:

echo json_encode(array('test_result' => 'success'));

С помощью этого кода вы получите: {"test_result":"success"}

С вашим исходным кодом echo json_encode("[{'test_result':'success'}]"); вы получите "[{'test_result':'success'}]"

Попробуйте добавить fail callback как:

$.getJSON('test.php', { action:'test' }, function(data, status){
    console.log(data); //doesn't fire
    console.log(status); //doesn't fire
}).fail(function( jqxhr, textStatus, error ) {
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
});
  • 0
    Я просто редактировал, чтобы сделать это более надежным. $test = array("test"=>"success"); echo json_encode($test); по-прежнему не удается. Как и ваше предложение. Проблема в том, что $.getJSON никогда не выполняется, и я подозреваю, что { action: 'test' } как-то с этим связан.
  • 0
    Я обновляю свой ответ и предлагаю использовать функцию сбоя для отладки и выявления ошибок.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню