2013-11-23 3 views
0

У меня есть следующий код javascript на стороне клиента.JSON кодирует строку с # и другими специальными символами

<html> 
    <script type="text/javascript" src="js/jquery.min.js"></script> 
    <script> 

    $(document).ready(function() { 
     //var parameters = "a=" + JSON.stringify({ Code: "xyyyzz"}); 
     var parameters = "a=" + JSON.stringify({ Code: "x#yyy#zz"}); 
     alert(parameters); 

     $.getJSON('http://localhost:8080', parameters) 
     .done(function(str){ 
      alert("success"); 
      }) 
     .fail(function(e) { 
      alert("failure"); 
      }); 

     }); 
</script> 
</html> 

и на следующий стороне сервера Node.js код

var http = require('http'); 
var URL = require('url'); 
var queryString = require("querystring"); 

handler = function(req, res) { 
       url = URL.parse(req.url); 
       var queryObj = queryString.parse(url.query); 
       var obj = JSON.parse(queryObj.a); 
       console.log(obj.Code); 
}; 

host = '127.0.0.1'; 
port = 8080; 
http.createServer(handler).listen(port, host); 
console.log('Server running at http://' + host + ':' + port + '/'); 

Теперь, если я загрузить файл .html, вызов JSON сделан из JavaScript. Однако параметр не передается полностью. Он передается только до первого символа # и поэтому приводит к сбою сервера nodejs в функции разбора. Теперь, если я раскомментирую предыдущую строку в .js, где передается строка без #, сервер nodejs может успешно проанализировать параметры.

Итак, мой вопрос: не способен ли JSON кодировать специальные символы, такие как # в строке? Или это ошибка? Или мне нужно добавить что-нибудь еще, чтобы исправить это, чтобы x # yyy # zz передавался как целая строка на сервер nodejs?

ответ

0

Ваши данные должны быть закодированы в url, # имеет специальное значение в URL-адресах.

Если передать объект $ .getJSON будет автоматически закодированный для вас

var parameters = {"a" : JSON.stringify({ Code: "x#yyy#zz"})}; 

или вы можете вручную кодировать его

var parameters = "a=" + encodeURIComponent(JSON.stringify({ Code: "x#yyy#zz"})); 
Смежные вопросы