Строка, представляющая путь в Java, возвращается с двойной обратной косой чертой при вызове ajax

#javascript #java #ajax #string #backslash

#javascript #java #ajax #строка #обратная косая черта

Вопрос:

я пытаюсь вернуть строку из Java в вызов ajax. Строка содержит локальный путь к файлу Excel, который должен быть открыт в браузере: например: «D:docsfile.xls » Проблема в том, что при возврате in возвращается двойная обратная косая черта следующим образом: «D:docsfile.xls » Я пытался использовать регулярные выражения, как в Java, так и в javascript, чтобы исправить это, но путьдвойная обратная косая черта остается неизменной.

Вызов ajax

 $.ajax({
        url : baseUrl   "autotest/process",
        type : 'GET',
        data : '',
        dataType : 'text',
        contentType: 'text/plain',
        processData: false,
        success : function(data) {
            //Here data contain a path with double backslash \
            //even if i try to strip out the \ as follow:
            var str = data.replace(/\/g, "\");
           //str still have the double backslash \
  

Контроллер в Java:

 @RequestMapping(value = "app/process", method = RequestMethod.GET)
    public @ResponseBody String process(HttpServletRequest request, HttpServletResponse response) {
    // code...

    // trying to strip all the double backslash
    String path = str.replaceAll("\\\\", "\\");
    // path still have the double backslash \
    return path;
}
  

Как я могу решить эту проблему?

Большое вам спасибо

Ответ №1:

Если ваша цель — удалить двойные обратные косые \ data черты, то регулярное выражение, которое вы используете в вызове ajax, неверно.
Это должно быть /\\/g вместо /\/g :

 var str = data.replace(/\\/g, "\");
  

Комментарии:

1. Спасибо за ваш ответ. Я попробовал ваше регулярное выражение, и результат тот же. Достаточно интересным является тот факт, что если я помещу оператор console.log(‘received: ‘, data); вывод печатается правильно как полученный: «D:docsfile.xls » и это перед выражением var str = data.replace(/\\/g, «\»);выдается почему?

2. Интересно. Можете ли вы зарегистрировать как str, так и данные после вызова replace ? кроме того, можете ли вы System.out.print str и строку пути до и после вызова replace также в серверной части?