[OpenLayers-Users] Problems with IE8 and GeoJSON

Gerhard Dünnebeil Gerhard.Duennebeil at chello.at
Sun Aug 16 05:39:39 EDT 2009


ok, finally found it myself.
When working with JSON the Internet Explorer is more critical than firefox.
Within the array brackets [] for the "features" array my JSON contained 
an extra "," at the end.
Firefox ignores it, IE obviously does not.
Fixing this problem made my code work

Best regards
Gerhard


Gerhard Dünnebeil wrote:
> Hi everybody.
>
> Not sure this problem already got discussed, if yes.....please give me a 
> pointer to it. Otherwise  .....
>
>
>
> I try to display a vector layer using a fixed strategy and GeoJSON. 
> Things work fine under Firefox.
>
> When I test things with IE8, things fail. I run IE8 in default mode, no 
> special headers or anything set on the web page that holds the map or 
> elsewhere.
>
> I digged deeper into it and found the following strange behaviour:
> When the Layer is about to be drawn, data is fetched from the net and 
> converted from JSON to java script. This happens in the read method 
> (GEOjson.js/Line 64, see code excerpt below)
>
> A bit below (line 69) the conversion is done into the variable "obj".
> When you look at the "obj" variable at this point it holds an array 
> named features *but* the feature array has *no* length property. 
> Otherwise the array is correct with respect to the input data.
>
> In line 108 this feature array is iterated with a reference to the 
> length property. When IE8 interprets this statement the feature array 
> suddenly *has* a length property but it is wrong (too big, 3 instead of 2).
> As a follow-up error this causes the loop to break via the catch block 
> when features[2] is accessed and gives back an empty result instead of 
> the expected.
>
> Is this a known problem?
> How to work around it?
>
> thanks for any help and
> best regards
> Gerhard
>
> ------------------------------------------
> Appendix 1, the code mentioned above)
>
> read: function(json, type, filter) {
>         type = (type) ? type : "FeatureCollection";
>         var results = null;
>         var obj = null;
>         if (typeof json == "string") {
> line 69:            obj = OpenLayers.Format.JSON.prototype.read.apply(this,
>                                                               [json, 
> filter]);
>         } else {
>             obj = json;
>         }   
>         if(!obj) {
>             OpenLayers.Console.error("Bad JSON: " + json);
>         } else if(typeof(obj.type) != "string") {
>             OpenLayers.Console.error("Bad GeoJSON - no type: " + json);
>         } else if(this.isValidType(obj, type)) {
>             switch(type) {
>                 case "Geometry":
>                     try {
>                         results = this.parseGeometry(obj);
>                     } catch(err) {
>                         OpenLayers.Console.error(err);
>                     }
>                     break;
>                 case "Feature":
>                     try {
>                         results = this.parseFeature(obj);
>                         results.type = "Feature";
>                     } catch(err) {
>                         OpenLayers.Console.error(err);
>                     }
>                     break;
>                 case "FeatureCollection":
>                     // for type FeatureCollection, we allow input to be 
> any type
>                     results = [];
>                     switch(obj.type) {
>                         case "Feature":
>                             try {
>                                 results.push(this.parseFeature(obj));
>                             } catch(err) {
>                                 results = null;
>                                 OpenLayers.Console.error(err);
>                             }
>                             break;
>                         case "FeatureCollection":
> line 108:                            for(var i=0, 
> len=obj.features.length; i<len; ++i) {
>                                 try {
>                                     
> results.push(this.parseFeature(obj.features[i]));
>                                 } catch(err) {
>                                     results = null;
>                                     OpenLayers.Console.error(err);
>                                 }
>                             }
>                             break;
>                         default:
>                             try {
>                                 var geom = this.parseGeometry(obj);
>                                 results.push(new 
> OpenLayers.Feature.Vector(geom));
>                             } catch(err) {
>                                 results = null;
>                                 OpenLayers.Console.error(err);
>                             }
>                     }
>                 break;
>             }
>         }
>         return results;
>   
> ------------------------------------------------
> Appendix 2, the JSON data
>
> { "type" : "FeatureCollection", "features" : [ { "type" : "Feature" 
> ,"geometry": { "type": "Point", "coordinates": [291068,270013] } 
> ,"properties": { "img_url": "icons/green_dot.gif" } }, { "type" : 
> "Feature" ,"geometry": { "type": "Point", "coordinates": [291069,269967] 
> } ,"properties": { "img_url": "icons/red_dot.gif" } }, ] }
>
>
>
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>
>   




More information about the Users mailing list