2016-04-02 1 views
0

J'envoie une chaîne au serveur en utilisant ng-resource. Si j'ajoute & dans la chaîne à tout moment, les caractères après & ne sont pas envoyés au serveur.& Causes Chaîne à Split Lorsque envoyées au serveur

Par exemple, si j'envoie la chaîne au serveur:

"This part of the string is shown & this part of the string is NOT shown" 

après tout & est jamais montré. C'est comme si elle avait été hachée avant d'être envoyée au serveur.

Voici un exemple de code de travail.

angular.module('testApp', ['ngResource']) 

.service('TestService', testService) 

.controller('Controller', theController); 

function testService() { 
    this.$get = get; 

    get.$inject = ['$resource']; 

    function get($resource) { 
    var baseUrl = window.location['origin']; 

    var theResource = $resource(
     baseUrl + '/test_url', 
     {}, 
     { 
     testMe: {method: 'GET', url: '/test_url'} 
     } 
    ) 

    return theResource; 
    } 
} 

theController.$inject = ["TestService"]; 

function theController(TestService) { 
    activate(); 

    function activate() { 
    var stringToSend = "this part of the string is shown & this part of the string will NOT be shown"; 

    // The server will only see the text "this part of the string is shown &" 
    TestService.testMe({stringParam: stringToSend}, function(resp) {}); 
    } 
} 

Qu'est-ce qui ne va pas et comment résoudre ce problème?

PS: Quand je veux dire not shown, je veux dire qu'il est comme n'a jamais été envoyé cette partie de la chaîne.

+0

Quelque chose URL non codant pour la chaîne avant de le coller dans l'URL. Je ne peux pas trouver où 'stringParam' est lu dans ce code. – Quentin

+0

C'est parce que vous l'envoyez en tant que partie de la chaîne de requête et le & fonctionne comme une partie de la chaîne de requête pour diviser les paramètres. Essayez plutôt de l'envoyer en tant que demande de publication. Il devrait envelopper les paramètres dans le corps de la demande et ensuite vous recevrez tout cela. –

+0

Celui qui a posté la réponse 'encodeURI' était correct. Malheureusement, ils ont supprimé la réponse. – jason328

Répondre

1

Faites la chaîne encode avant de l'envoyer au serveur à l'aide de la méthode encodeURI. Je pense que le décodage de la valeur du paramètre se fera automatiquement.

code

TestService.testMe({ 
    stringParam: encodeURI(stringToSend) 
}, function(resp) {}); 
+0

Fonctionne !!! Merci. – jason328

+0

@ jason328 heureux d'entendre cela. Merci :-) –