Ответ 1
Первое, что я бы дважды проверил, - это то, что данные, возвращаемые из ответа, действительны JSON. Просто передайте его через валидатор JSON, подобный этому онлайн JSONLint: http://jsonlint.com/
Я предполагаю, что вы используете что-то вроде jQuery для выполнения ваших запросов AJAX. Если это так, убедитесь, что вы используете версию разработки этой библиотеки. Теперь, когда вы используете версию разработки (несжатой) script, найдите конкретную функцию, которую используете (например, $.ajax), а затем в инспекторе Chrome вставьте точку останова в код, где ответ AJAX (например, https://github.com/jquery/jquery/blob/master/src/ajax.js#L579). Затем переходите к выполнению кода, проверяя различные возвращаемые значения, чтобы точно увидеть, что происходит.
Если вы не используете что-то вроде jQuery для совершения AJAX-вызовов, я бы рекомендовал использовать фреймворк, чтобы избежать возможных проблем с совместимостью между браузерами, как вы могли бы испытывать прямо сейчас.