WMS – Fixing Image Tiles Loading Issue for WMS Layers in MapServer Mapfile

mapfilemapserverwms

One of my WMS layer is not loading the image tiles.
See the code:

    <script type="text/javascript">
    var map, ia_wms;
    function init(){
        map = new OpenLayers.Map('map', {zoomDuration: 1,projection: 'EPSG:3857'});
    var esr_all = new OpenLayers.Layer.WMS("ESR_Boundary","http://localhost/cgi-bin/mapserv?map=/var/www/mstest/plant_sr.map",{'layers':"ESR_outline",'transparent':true,'format':'image/png'}
           ,{
            isBaseLayer: false,opacity: 100
            }
            );
    var mslayer = new OpenLayers.Layer.WMS( "MapServer Layer",
                                          "http://localhost/cgi-bin/mapserv?map=/var/www/osm-demo/mapserver-utils-svn/osm-google_test.map&",
                                          {'layers': "land0 borders0 places0 land1 borders1 places1 land2 borders2 places2 land3 borders3 places3 land4 landuse4 transport_areas4 waterarea4 borders4 places4 land5 landuse5 transport_areas5 waterarea5 roads5 borders5 places5 land6 landuse6 transport_areas6 waterarea6 waterways6 roads6 borders6 places6 land7 landuse7 transport_areas7 waterarea7 waterways7 roads7 borders7 places7 land8 landuse8 transport_areas8 waterarea8 waterways8 railways8 roads8 borders8 places8 land9 landuse9 transport_areas9 waterarea9 waterways9 railways9 roads9 borders9 places9 land10 landuse10 transport_areas10 waterarea10 waterways10 railways10 roads10 aeroways10 borders10 places10 land11 landuse11 transport_areas11 waterarea11 waterways11 railways11 roads11 aeroways11 borders11 places11 land12 landuse12 transport_areas12 waterarea12 waterways12 railways12 roads12 aeroways12 borders12 places12 land13 landuse13 transport_areas13 waterarea13 waterways13 railways13 roads13 aeroways13 borders13 places13 land14 landuse14 transport_areas14 waterarea14 waterways14 railways14 roads14 aeroways14 borders14 places14 land15 landuse15 transport_areas15 waterarea15 waterways15 railways15 roads15 aeroways15 borders15 places15 land16 landuse16 transport_areas16 waterarea16 waterways16 railways16 roads16 aeroways16 borders16 places16 land17 landuse17 transport_areas17 waterarea17 waterways17 railways17 roads17 aeroways17 borders17 places17 land18 landuse18 transport_areas18 waterarea18 waterways18 railways18 roads18 aeroways18 borders18 places18"}
                                           );    
    map.addLayers([esr_all, mslayer]);
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    map.zoomToExtent(new OpenLayers.Bounds(69.00,21.00,70.00,22.00));
    map.setCenter(new OpenLayers.LonLat(69.57,21.55).transform(
    new OpenLayers.Projection('EPSG:4326', 'EPSG:3857'),
    map.getProjectionObject()
    ), 14);
    }
</script>

See the image:

esr_all layer is showing

I get an error:

msWMSLoadGetMapParams(): WMS server error. Invalid layer(s) given in the LAYERS parameter. A layer might be disabled for this request. Check wms/ows_enable_request settings.

Instead if change it as a mapserver layer,

    var mslayer = new OpenLayers.Layer.MapServer ( "MapServer Layer",
                                          "http://localhost/cgi-bin/mapserv?map=/var/www/osm-demo/mapserver-utils-svn/osm-google_test.map&",
                                          {'layers': "land0 borders0 places0 land1 borders1 places1 land2 borders2 places2 land3 borders3 places3 land4 landuse4 transport_areas4 waterarea4 borders4 places4 land5 landuse5 transport_areas5 waterarea5 roads5 borders5 places5 land6 landuse6 transport_areas6 waterarea6 waterways6 roads6 borders6 places6 land7 landuse7 transport_areas7 waterarea7 waterways7 roads7 borders7 places7 land8 landuse8 transport_areas8 waterarea8 waterways8 railways8 roads8 borders8 places8 land9 landuse9 transport_areas9 waterarea9 waterways9 railways9 roads9 borders9 places9 land10 landuse10 transport_areas10 waterarea10 waterways10 railways10 roads10 aeroways10 borders10 places10 land11 landuse11 transport_areas11 waterarea11 waterways11 railways11 roads11 aeroways11 borders11 places11 land12 landuse12 transport_areas12 waterarea12 waterways12 railways12 roads12 aeroways12 borders12 places12 land13 landuse13 transport_areas13 waterarea13 waterways13 railways13 roads13 aeroways13 borders13 places13 land14 landuse14 transport_areas14 waterarea14 waterways14 railways14 roads14 aeroways14 borders14 places14 land15 landuse15 transport_areas15 waterarea15 waterways15 railways15 roads15 aeroways15 borders15 places15 land16 landuse16 transport_areas16 waterarea16 waterways16 railways16 roads16 aeroways16 borders16 places16 land17 landuse17 transport_areas17 waterarea17 waterways17 railways17 roads17 aeroways17 borders17 places17 land18 landuse18 transport_areas18 waterarea18 waterways18 railways18 roads18 aeroways18 borders18 places18"}
                                           );

it works and I get tiles for both the layers. Why is it not when both are WMS layers?

In my osm-google_test.map file the WEB portion is like this:

WEB
#IMAGEPATH "/tmp/ms_tmp/"
#IMAGEURL "/ms_tmp/"
    IMAGEPATH '/opt/fgs/tmp/ms_tmp/' 
    IMAGEURL  '/ms_tmp/'
TEMPLATE  '/var/www/mstest/templatesample.html'
#labelcache_map_edge_buffer "10"
    METADATA
        "wms_enable_request"    "*"
        #"ows_enable_request" "*"
        "wms_srs" "EPSG:900913 EPSG:4326 EPSG:3857 EPSG:2154 EPSG:310642901 EPSG:4171 EPSG:310024802 EPSG:310915814 EPSG:310486805 EPSG:310702807 EPSG:310700806 EPSG:310547809 EPSG:310706808 EPSG:310642810 EPSG:310642801 EPSG:310642812 EPSG:310032811 EPSG:310642813 EPSG:2986"
            "labelcache_map_edge_buffer" "-10"
            "wms_title" "osm france"
    END
END

Best Answer

Your layer names specification is wrong, try it this way:

var mslayer = new OpenLayers.Layer.MapServer ( 
    "MapServer Layer",
    "http://localhost/cgi-bin/mapserv?map=/var/www/osm-demo/mapserver-utils-svn/osm-google_test.map&",
    {'layers': ["land0","borders0","places0","land1"]}
);

Basically it is an array of strings, not a single string. In your particular example just add there all other of your layers names.