Larissa's link is essentially correct, and she is right in that ppm = parts per million.
The qualifier "dilute" has to be added to Larissa's quote there because a ppm and a mg/L is not the same thing.
Firstly, a part per something (million in this case) is a comparison between two like measurements. Commonly it is mass, or volume, or number. For example, if I hid 1 green ball in a large bin with 999 999 other red balls, the bin would have 1 ppm of green balls. If 1 mL (0.001 L) of dye is added to 999.999 L of water, then the solution is 1 ppm of dye. 0.001 L / (0.001 L + 999.999 L) = 1/1 million = 1 ppm. Note in this example the L on the top of the fraction cancel out the L on the bottom of the fraction -- that's why I said ppm has to be done between like units -- they have to cancel each other in the ratio becaue ppm itself is unitless.
It is not a comparison between two dislike measurements, otherwise the units would have to be listed. a mg/L is two dislike measurements, a mass per unit volume. Normally, you can't turn that into a ppm or ppt (pert per thousand) or ppb (part per billion) because of the dislike units. However, in dilute aqueous solution, a ppm by volume and mg/L are very, very close to the same. This works because of the dilute part of that phrase, where the overwhelming majority of the solution is water. Water has a density of 1000kg/m^3 or 1000 g/L, so you an use this to convert a mg to a volume and then calculate the ppm. The density difference of the solute (like ammonia or nitrate or chlorine) isn't a factor because there is so little of it. The density of liquid ammonia is around 880 g/L, not exactly water, but rather close.
So, all in all a mg/L and a ppm is basically identical, for dilute concentrations. Where it breaks down depends on the particular solute, but it is accurate enough up to at least 100 ppm for all the common parameters we deal with in fishkeeping.