Почему строка неправильно передается на сервер, если в моей переменной есть «#»? - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь структурировать объект, но мой URL не возвращается правильно, когда в объекте есть '# `.

Я вывел значение JSON.stringify($scope.parameter);, и это правильно, однако URL-адрес не является.

$scope.parameter = '#' + parameter;

var url = $scope.url + '&functions=' + JSON.stringify($scope.parameter);

Я ожидаю, что это будет {"1": "объект i001 :: # 11"}

но на самом деле это {"1": "i001 ::

1 Ответ

3 голосов
/ 04 июля 2019

Поскольку вы не правильно его кодируете, то это интерпретируется как идентификатор фрагмента (# вводит идентификатор фрагмента).

Вы должны кодировать URI вещи, которые вы помещаете в URI:

var url = $scope.url + '&functions=' + encodeURIComponent(JSON.stringify($scope.parameter));
// ------------------------------------^

Технически, вы также должны кодировать URI functions в вышеприведенном коде, но поскольку версия functions в кодировке URI ... 1009 *, я не стал беспокоиться выше.Но если это не обязательно безопасно, то:

var url = $scope.url + '&' + encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify($scope.parameter));

Если имена, которые вы используете в парах name=value, содержат только цифры, буквы, подчеркивания и тире, вы можете спокойно пропустить URI-кодирование для них, как я делал в первом примере выше.(Существуют и другие символы, которые также разрешены, но если вы начнете использовать их, просто закодируйте, как во втором примере, для безопасности.)

...