Вот решение, которое я использую. Проблема объясняется ниже.
Я не понимаю, почему .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, он больше не функционирует. Есть ли простая причина?
Ваш файл 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 );
});
$test = array("test"=>"success"); echo json_encode($test);
по-прежнему не удается. Как и ваше предложение. Проблема в том, что $.getJSON
никогда не выполняется, и я подозреваю, что { action: 'test' }
как-то с этим связан.