Ребят, обыскал все топ 50 по поисковикам, ничего подобного нигде не нашел... То ли я дурак, то ли лыжи...
Суть: аякс запрос в обработке сабмита формы:
$(function(){
$('#login_form').submit(function(e){
e.preventDefault();
var m_method=$(this).attr('method');
var m_action=$(this).attr('action');
var m_data=$(this).serialize();
$('#login_error').html('');
$.ajax({
type: m_method,
url: m_action,
data: m_data,
dataType: "json",
success: function(result){
if (result.name =='Serg'){
$('#user_form').load('incs/sidebar/sidelogin.inc.php');
$('#login_error').html('');
}
else {
$('#login_error').html('<span style="color:#F00"><b>'+ result.name +'</b></span>');
}
}
});
return false;
});
});
Собственно php файл, на который приходит POST запрос:
<?php
$answ = array('name' => 'Alexander');
echo json_encode($answ);
?>
Так всё работает. Стоит только добавить в этот php файл любой include, include_once, require, require_once (даже пустой <?php ?>), так результат невозможно обработать: внешне он выдает одинаковые ответы (с инклудом и без), а обрабатывать не хочет.
Аналогично в случае если использовать не json, а обычный html. Пример:
php:
<?php
include 'incs/config.inc.php';
echo 'Serg';
?>
JS:
if (result == 'Serg'){
//---//
}
Данный случай также не будет выполняться, пока есть include.
Прошу, дайте совет, что делать, кроме как все тексты инклудируемых файлов перекатывать в этот файл?
Примечание:
Добавил.
Ответы выдает одинаковые:
{"name":"Alexander"}
При этом без подключаемого файла:
1) Он определяет, что это JSON
2) Объем тела ответа 23 байта
А с подключаемым пустым <?php ?> файлом:
1) Он не определяет, что это JSON (нет вкладки)
2) Объем тела ответа 26 байт
Заголовки ответа и запроса в обоих случаях идентичны.
Отличия только в теле ответа на 3 байта
Примечание:
Только что сравнил в WinHex'е оба ответа, вот что получил:
1) Без инклуда:
EFBBBF7B226E616D65223A22416C6578616E646572227D
{"name":"Alexander"}
2)С инклудом:
EFBBBFEFBBBF7B226E616D65223A22416C6578616E646572227D
{"name":"Alexander"}
Зачем он пишет EFBBBF (Это BOM (Byte order mark) символ) дважды - я не понимаю.
Я конечно, кажется, догадываюсь - в инклудируемом файле он есть тоже, поэтому он его опять же добавляет, но это, я думаю, врядли
Примечание:
Всё, решил проблему! Огромное спасибо, что подтолкнули верно.
Действительно, надо просто убирать BOM символы в коде и всё работает шикарно.
Надеюсь, этот вопрос поможет и остальным, кто с этой проблемой столкнулся или столкнется.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.