Ajax jQuery и обработка различных типов данных

вставьте в B15 и перетащите вправо:

=IFERROR(SUMPRODUCT(QUERY(TRANSPOSE(QUERY(TRANSPOSE($B$2:$J$9), 
 "where Col1='"&B11&"'", 2)), 
 "where Col1='"&B13&" "&B12&"'", 0)), )

0

11
задан swilliams 11 May 2009 в 22:36
поделиться

4 ответа

Для ошибок JSON вы можете вернуть с сервера код состояния 500, а не 200. Затем код клиента jquery может использовать обработчик error: в файле $. Функция ajax для обработки ошибок. В ответе 500 вы можете проанализировать объект ошибки JSON из responseText, в ответе 200 вы можете просто вставить свой HTML в div как обычно.

9
ответ дан 3 December 2019 в 06:47
поделиться

Хотя идея Стива хороша, я добавляю ее для полноты картины.

Похоже, что если вы укажете dataType как json, но вернете HTML, jQuery справится с этим нормально.

Я проверил эту теорию с помощью следующего кода:

if($_GET['type'] == 'json') {
    header('Content-type: application/json');
    print '{"test":"hi"}';
    exit;
} else {
    header('Content-type: text/html');
    print '<html><body><b>Test</b></body></html>';
    exit;
}

$ _ GET ['type'] просто для того, чтобы я мог контролировать, что возвращать во время тестирования. В вашей ситуации вы бы вернули то или иное, в зависимости от того, пошло ли что-то правильно или неправильно. После этого, с помощью этого кода jQuery:

$.ajax({
    url: 'php.php?type=html', // return HTML in this test
    dataType: 'json',
    success: function(d) {
        console.log(typeof d); // 'xml'
    }
});

Несмотря на то, что мы указали JSON как dataType, jQuery (1.3.2) выясняет, что это не так.

$.ajax({
    url: 'php.php?type=json',
    dataType: 'json',
    success: function(d) {
        console.log(typeof d); // 'object'
    }
});

Так что вы можете воспользоваться этим (насколько я знаю) недокументированное поведение, позволяющее делать то, что вы хотите.

6
ответ дан 3 December 2019 в 06:47
поделиться

Но почему бы не вернуть только JSON независимо от статуса (успех или ошибка) в POST и не использовать GET для отображения результатов?
Это кажется лучшим подходом, если вы спросите я.

3
ответ дан 3 December 2019 в 06:47
поделиться

Или вы всегда можете вернуть ответ JSON и указать один параметр в качестве содержимого HTML.

Что-то вроде:

{
     "success" : true,
     "errormessage" : "",
     "html" : "<div>blah</div>",
}

Думаю, вам достаточно убрать двойные кавычки в значении html, и синтаксический анализатор json отменит это за вас.

0
ответ дан 3 December 2019 в 06:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: