JQuery / Ajax / не может выяснить, что не так

По какой-то причине этот ajax-вызов, над которым я работаю, возвращает состояние ошибки в журнале консоли … Я не могу понять, почему, для меня все выглядит правильно!

AJAX:

$(document).ready( function() {

$('.load-more').click(function(e) {
e.preventDefault();

console.log('Starting AJAX');

var $this = $(this);

var load   = $this.data('current-page') + 1;

var parent = $this.data('parent');

var properties = {
snippet: 'infiniteScroll',
limit: 3,
offset: 0,
parents: 22,
depth: 999,
sortby: 'publishedon',
showHidden: 1,
debug: 1,
tpl: 'infiniteHomePageTpl',
};

$this.data('current-page', load);

$.ajax({
type: "POST",
url: "/ajax.processor",
data: properties,
cache: false,
dataType: "json",

success: function(response) {

if(response.status == 'success'){

console.log('Success');

}else if(response.status == 'error'){

console.log('data error');

}else{

console.log('some other error');

}

},

error: function(response){

console.log('an error has occurred' + response);

},

}); // ajax
});

});// document ready

Процессор называется:

<?php

// $modx->log(modX::LOG_LEVEL_ERROR,'Running ajax.processor, snippet = '.$_POST['snippet'].' formdata = '. print_r($_POST, TRUE));

$output = $modx->runSnippet($_POST['snippet'],array(
'snippet' => $_POST['snippet'],
'data' => $_POST
));

// set the header for the ajax call

$output =  json_encode($output);

header('Content-type: application/json');

$modx->log(modX::LOG_LEVEL_ERROR,'Should be json = '.$output);

echo $output;

Код, который выполняет процессор:

<?php

//$modx->log(modX::LOG_LEVEL_ERROR, 'Running infinitescroll snippet' . print_r($scriptProperties, TRUE));

$output = array(
'status' => 'success',
'msg' => 'a message of some type',
'whatever' => 'this is some data',
);

return $output;

Строка регистрации в процессоре выведет json в журнал:

Should be json = {"status":"success","msg":"a message of some type","whatever":"this is some data"}

так что мой javascript ~ должен ~ возвращать json, но он не соответствует условию успеха, все, что я получаю в журнале консоли:

an error has occurred[object Object]

Что я здесь не так делаю?

0

Решение

Вам нужно json_encode для массива php, как уже прокомментировал Kaleb. http://php.net/manual/en/function.json-encode.php

Итак, ваш код должен быть:

//$modx->log(modX::LOG_LEVEL_ERROR, 'Running infinitescroll snippet' . print_r($scriptProperties, TRUE));

$output = array(
'status' => 'success',
'msg' => 'a message of some type',
'whatever' => 'this is some data',
);

$json = json_encode($output);

return $json;

Я бы также посоветовал вам использовать Firebug для мониторинга вашего javascript вместо записи сообщений консоли: http://getfirebug.com/

0

Другие решения

Попробуйте использовать HTTP-клиент, такой как Почтальон (или даже cURL), чтобы высмеять ваш вызов AJAX. Это облегчает проверку заголовков и содержимого ответа.

Кроме того, когда вызывается обработчик ошибок, первый аргумент всегда будет объектом XHR. Если вы делаете console.log(response); (без приведения строки) вы должны быть в состоянии проверить его содержимое. Что может быть более полезным для вас, хотя два других параметра:

ошибка
Тип: Функция (jqXHR jqXHR, String textStatus, String
errorThrown)

Больше информации в документы jQuery.ajax.

0

Вам на самом деле нужен заголовок типа контента json а также закодировать вывод:

<?php
header('Content-Type: application/json');

//$modx->log(modX::LOG_LEVEL_ERROR, 'Running infinitescroll snippet' . print_r($scriptProperties, TRUE));
$output = array(
'status' => 'success',
'msg' => 'a message of some type',
'whatever' => 'this is some data',
);
echo json_encode($output);

И если вы хотите знать, почему это происходит, вы можете ожидать errorThrown используя $.ajax.fail():

$.ajax({
type: "POST",
url: "/ajax.php",
data: properties,
cache: false,
dataType: "json",

success: function(response) {
//your code
},

error: function(response){
//your code
},

}).fail(function(jqXHR,textStatus,errorThrown) {
console.log(errorThrown);
});
0
По вопросам рекламы [email protected]