Почему я получаю 'Symfony2 Не найден маршрут для "GET / module /% 3C" ... ", когда работают похожие вызовы - PullRequest
0 голосов
/ 22 октября 2018

Я получаю: это сообщение об ошибке:

Не найден маршрут для "GET / module / % 3C" (из "http://site/app_dev.php/module/page")

с использованием следующего вызова ajax:

   timeStamp = ( new Date() ).getTime();
   $.ajax( {
      method      : 'POST',
      url         : 'http://site/app_dev.php/module/page/Delete/' +
                    timeStamp,
      data        : formData,
      dataType    : 'json',
      async       : true,
      cache       : false,
      contentType : false,
      processData : false,

      success     : function( data ) { ... },

      error       : function( jqXHR, textStatus, errorThrown ) { ... }

    } );

Вот аннотация маршрута страницы и определения функций, которые я пытаюсь вызвать:

/**
 * @Route("/module/page")
 * @Route("/module/page/{timeStamp}")
 * @Route("/module/page/Delete/{timeStamp}")
 *
 * @return:    page response HTML string, JSON encoded action results or
 *             JSON encoded error results.
 */
public function pageAction( $timeStamp=NULL ) { ... }

Что такоестранно, что эта функция успешно используется для создания страницы, которая содержит несколько других похожих ajax-вызовов, которые работают в дополнение к приведенному выше.

Вот один из работающих вызовов:

$.ajax( {
   method      : 'POST',
   data        : formData,
   dataType    : 'json',
   async       : true,
   cache       : false,
   contentType : false,
   enctype     : 'multipart/form-data',
   processData : false,

   success     : function( data, textStatus, jqXHR ) { ... ),

   error       : function( data ) { ... }

} );

Основное отличие состоит в том, что неудачный вызов ajax имеет явный URL, а тот, который работает, использует неявную адресную строку отображаемой страницы.

Я попытался выполнить вызов с этими двумя частями и без них.URL, но получить тот же результат в любом случае.

Я не знаю, если это важно, но когда я использую отладчик в Chrome, точка останова в первой строке кода в функции успеха кратко выделяется итогда страница повторяетсяaced с отображением «Маршрут не найден ...»

Поскольку в вызове используется сообщение «POST», почему в сообщении об ошибке говорится «Get» и используется явный URL, включающий «/ Delete»и '/' + timeStamp, почему они не отображаются в сообщении об ошибке?

Кстати.В вызове ajax с явным URL-адресом я добавляю метку timeStamp для предотвращения возврата ранее кэшированного ответа, а не фактический вызов на сервер для удаления информации, указанной в объекте formData.

Inдругой ajax-вызов, который возвращает информацию, которая должна быть удалена при неудачном вызове, я обнаружил, что даже если было установлено «cache: false», вызов вернул бы устаревший ответ от предыдущего вызова, если бы я не включилtimeStamp в явном URL, но с включенным timeStamp, этот случай работает нормально.

1 Ответ

0 голосов
/ 22 октября 2018

Проблема заключалась в том, что html-элемент, якорный тег, который вызывал функцию, содержащую ajax, который, по моему мнению, не работал, также имел 'href', который делал собственный запрос к серверу на страницу, которая не работала.существуют и содержат странные символы «% 3C».

Таким образом, реальный ответ - не оборачиваться вокруг оси и обязательно проверить все, что привело к очевидной проблеме.

Раздражение в этом случае заключалось в том, что вызов, приводящий к сообщению об ошибке, происходил немного раньше, чем вызов на стороне сервера ajax нужной функции, поэтому отладчик показывал, что, хотя выполнение остановилось справаточка останова в элементе управления функции успеха была «выдернута», так как отображалась ошибка «Не найдено».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...