To answer your question directly - you're parsing the json twice - once because you specify dataType: 'json', and again with the $.toJSON. You can probably change the datatype to 'text' and it will solve your problem.
The correct answer though, is to use an asynchronous call with a callback. Someone else has answered the question as I've been typing, so look at their answer instead :)
--edit--
To answer your comments (because formatting doesn't really work in comments). You don't need to stringify the data - you can send it as an object. There's no need to declare the msg variable before the function. Async is the default, so you can just leave that out.
var list = [994, 994, 994, 994];
$.ajax({
type: "POST",
url: "http://www.eaglerider.com/ETS.UI/WebServices/LocationService.asmx/GetMappingLocationDetails",
contentType: "application/json; charset=utf-8",
data: { componentIdCollection: list },
dataType: "json",
sucess: function(msg){
// msg holds your JSON data
console.log(msg);
}
});
Once you've got that msg data, I'm guessing you want to append it to the list, then you would call the function that redraws the location data on the map.