2011-03-10 119 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