J'attendais des paramètres de chaîne de requête à l'aide de la fonction JavaScript standard Le test échoue avec l'erreur suivante: p> $ http codes URI Composants correctement à résumer: p> Quel composant URI (paramètres de la chaîne de requête AKA) devrais-je m'attendre avec angularjs? p> p> Encodonquonent code>. Selon le test suivant, ce n'est pas le cas:
ERREUR: Demande inattendue: Obtenez /API/Process?Data=hello+From+Http:%2f%2fexample.com
Attendu Obtenez /API/Process?Data=hello%20From%20HTTP%3A%2F%2FEXAMSAMT.COM P>
blockQuote>
Bonjour% 20From% 20http% 3A% 2F% 2fexample.com Code> LI>
Hello + de + http:% 2f% 2fexample.com Code> Li>
ul>
3 Réponses :
Il semble que lorsque vous passez les paramètres pré-codant. Vous encodez l'URL mais après avoir passé une URL non codée via le paramètre de données JSON. Peut-être que cette modification de votre code fonctionnera. Aussi, après avoir pris uniquement la pièce de codage d'URL et la placer à l'intérieur d'un violon:
http://jsfiddle.net/entgl/1/ p> Il apparaît Pour fonctionner correctement, vous voudrez peut-être enquêter sur des facteurs externes, ce qui entraîne la question avec votre URL. Il existe également plusieurs autres options décrites ici dans ce P>
Bonjour - Je passe le paramètre pré-codant parce que je m'attends à Angularjs (le cadre JS que j'utilise ici) pour le faire pour moi. Et ça fait. Mais d'une certaine manière, je ne m'y attends pas. Il ne fait pas l'encodage dans la fonction code> Encodéturicomponent code>. Ma question est spécifique à angularjs.
S'il vous plaît essayez de pré-codage par mon code ci-dessus. Effectuez les changements suivants à cette ligne. var données = Encodégonposant ('Hello de exemple.com' );
Je ne peux pas m'encédoyer les données que je passe dans le cadre de la communication du serveur. Selon la documentation, la fonction http code> devrait le faire de manière transparente. Et cela le fait en fait correcté. Mon problème concerne principalement les tests, comme dans le test de jasmine, j'ai inclus dans ma question. Le pré-codage dans mon code n'est pas acceptable.
Angular (au moins 1.3) n'utilise pas uniquement de codéuricomponent et change quelques remplaçants (comme "" "sur" + ").
C'est la commission expliquant pourquoi: https://github.com/angular/angular.js/commit/9e30baad3fdc82fb2f20f4ba29e p>
Et voici ce que vous pouvez voir dans 1.3 Sources: P>
decodeURIComponent(val. replace('@', '%40'). replace(':', '%3A'). replace('$', '%24'). replace(',', '%2C'). replace(';', '%3B'). replace('+', '%20'));
Pouvons-nous y accéder en quelque sorte comme angular.encodétructrique ou quelque chose?
Dans mon humble avis angularjs est encodé à tort de la même manière des segments de chemin URI et des paramètres de requête URI. Pour moi, c'est un bug et j'ai réellement émis un Demande de tir pour la fixer. p>
Le test que j'ai introduit dans la requête de traction confirme ce bogue (Testé-le avec les deux angularjs 1.3. * code> et actuel
maître code>). p>