For me - this comes down to necessities. Is it a necessity to send that data as a JSON object? If the answer is no(which I think it is), you can remove the contentType from your original ajax request, and it would fire off correctly and be received by web.py just fine.
var my_data = { id: "12345", tags: "tag1,tag2,tag3" }
$.ajax({
type : "POST",
url : "/my_url/",
data : my_data,
});
I dropped dataType because I didn't see a callback function (complete, success, failure, etc.) handling the server response. If you are handling the response, and expecting application/json back from the server - than you should leave that in so jQuery will parse the server response properly.
I spot tested and something like this works
jQuery.ajax({
type:"POST",
url:'/someurl',
data:{id:'12345',tags:'tag1,tag2,tag3'},
success:function(data){
console.log(data);
}
});
recv'd by:
class SomeUrlClass:
def POST(self):
buffer = 'Unable to process'
data = web.input()
id = data.get('id','No Id')
tags = data.get('tags','').split(',')
return "id: %s, tags: %s" % (id, ','.join(tags))