2011-03-10 112 views
5

我有这样的代码(下面)..Jquery的AJAX编码数据

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + encodeURIComponent(note) + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
    contentType: "application/json; charset=utf-8" 
}); 

我使用这个数据传递给web服务,但问题是,如果有在那里的任何字符像这样(, /?:@ & = + $#)。我已经放入了一个encodeURIComponent,它工作正常,然后在Web服务中,我再次将它们放回去。

我问的是如果有更好的方式来完成这个?这似乎有点疯狂,我要的字符串每次路过这之前通过编码..

感谢

+0

为什么它似乎疯了吗?安全传输数据是否正常? – yoavmatchulsky 2011-03-10 17:58:51

+0

所以你说的是这些字符不安全地通过网络服务?他们会做什么样的伤害? – tmutton 2011-03-10 18:01:27

+2

$ .ajax会自动执行编码,不是吗? – 2011-03-10 18:05:05

回答

4

是Web服务属于你或你使用别人的网络服务?什么是Web服务不接受的原因(,/?:@ & = + $#)?

jQuery的$就默认的contentType是应用程序/ x-WWW窗体-urlencoded这意味着jQuery将编码的内容。但是,由于您指定了不同的contentType,所以数据不会被编码,因此您必须执行自己的编码。

或者,你可以尝试删除的contentType选项,并通过在你的内容(通常不encodeURICompnent)。

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + note + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
}); 
+0

我刚刚再次测试它,它似乎并没有工作..我已经尝试完全上述代码(没有contentType),并传递一个字符串包含字符(,/?:@&= + $#),仍然没有喜悦。有什么想法吗? – tmutton 2011-03-11 09:53:36

+0

问题现在不是特殊字符,而是换行符或返回。如果我在文本中放置回车,它不会发布到Web服务。有没有快速解决这个问题? – tmutton 2011-03-11 12:20:09

+0

所以你修好了特殊字符,好。没有看到代码,我不能确定是什么导致它不会发布到您的Web服务。试试这个,激活Net Panel(使用Firebug,在标签** Net **下)并发出ajax请求,查看服务器返回的错误代码是什么。 – suhendri 2011-03-11 18:07:04

10

通作为一个对象,而不是一个串传输数据:

$.ajax 
({ 
... 
data: {stars: stars, rating: rating...(etc)} 
}); 
+0

这对我有用。如果我使用数据的查询字符串,并且里面有一个+,那么当我的servlet检索到它时,即使我没有更改contentType,它也应该对它进行编码,它将成为一个空格。当我更改为上述方法时,我的servlet在数据中正确地看到了+。 – mikato 2012-08-29 19:17:34