При использовании любой формы Ajax в Интернете, похоже, отсутствует подробная документация для формата ответов, полученных от сервера CGI. Некоторые примечания здесь и записи на stackoverflow.com указывают на то, что переводы строки в возвращаемом тексте или данных json должны быть экранированы, чтобы предотвратить бесконечные циклы (зависания) при преобразовании JSON (возможно, создаваемые путем генерирования необработанного исключения), независимо от того, выполняется ли это автоматически с помощью jQuery или вручную с помощью Система Javascript или библиотека JSON-разбор вызовов.
В каждом случае, когда программисты публикуют эту проблему, представлены неадекватные решения (чаще всего замена \ n на \\ n на стороне отправителя), и вопрос упускается. Их неадекватность выявляется при передаче строковых значений, которые случайно встраивают управляющие управляющие последовательности, такие как пути Windows. Примером является «C: \ Chris \ Roberts.php», который содержит управляющие символы ^ c и ^ r, что может вызвать преобразование JSON строки {"file": "C: \ Chris \ Roberts.php"} в цикл навсегда. Одним из способов получения таких значений является намеренная попытка передачи предупреждений и сообщений об ошибках PHP от сервера клиенту, разумная идея.
По определению, Ajax использует HTTP-соединения за кулисами. Такие соединения передают данные, используя GET и POST, оба из которых требуют кодирования отправленных данных, чтобы избежать неправильного синтаксиса, включая управляющие символы.
Это дает достаточно подсказки для построения того, что кажется решением (требуется дополнительное тестирование): использовать rawurlencode на стороне PHP (отправляющей) для кодирования данных и unescape на стороне Javascript (принимающей) для декодирования данные. В некоторых случаях вы будете применять их ко всем текстовым строкам, в других случаях вы будете применять их только к значениям внутри JSON.
Если эта идея окажется верной, можно построить простые примеры, чтобы помочь программистам на всех уровнях решить эту проблему раз и навсегда.