@@ -85,7 +85,7 @@ var MixpanelExport = (function() {
85
85
MixpanelExport . prototype . segmentation = function ( parameters , callback ) {
86
86
return this . get ( [ "segmentation" ] , parameters , callback ) ;
87
87
} ;
88
-
88
+
89
89
MixpanelExport . prototype . multiseg = function ( parameters , callback ) {
90
90
return this . get ( [ "segmentation/multiseg" ] , parameters , callback ) ;
91
91
} ;
@@ -148,7 +148,7 @@ var MixpanelExport = (function() {
148
148
request . open ( "get" , this . _buildRequestURL ( method , parameters ) , true ) ;
149
149
request . setRequestHeader ( 'Authorization' , 'Basic ' + this . _base64Encode ( this . api_secret + ':' ) ) ;
150
150
request . onload = function ( ) {
151
- callback ( self . _parseResponse ( method , parameters , this . responseText ) ) ;
151
+ callback ( self . _parseResponse ( method , parameters , this . responseText , this . status ) ) ;
152
152
} ;
153
153
request . send ( ) ;
154
154
} ;
@@ -157,8 +157,13 @@ var MixpanelExport = (function() {
157
157
return "MixpanelExport: The '" + methodName + "' method cannot be used in your browser." ;
158
158
} ;
159
159
160
- // Parses Mixpanel's strange formatting for the export endpoint.
161
- MixpanelExport . prototype . _parseResponse = function ( method , parameters , result ) {
160
+ MixpanelExport . prototype . _parseResponse = function ( method , parameters , result , status ) {
161
+ // The export endpoint appears to give non-200 status codes on errors
162
+ // which has changed at some point.
163
+ if ( status && status < 200 || status > 299 ) {
164
+ return { error : result }
165
+ }
166
+
162
167
if ( parameters && parameters . format === "csv" ) {
163
168
return result ;
164
169
}
@@ -168,10 +173,10 @@ var MixpanelExport = (function() {
168
173
}
169
174
170
175
if ( method === "export" ) {
171
- var step1 = result . replace ( new RegExp ( '\n' , 'g' ) , ',' ) ;
172
- var step2 = '[' + step1 + ']' ;
173
- var result = step2 . replace ( ',]' , ']' ) ;
174
- return JSON . parse ( result ) ;
176
+ // Parses Mixpanel's strange formatting for the export endpoint into (hopefully) JSON:
177
+ var commaSeparated = result . replace ( new RegExp ( '\n' , 'g' ) , ',' ) ;
178
+ var arrayed = '[' + commaSeparated + ']' ;
179
+ result = arrayed . replace ( ',]' , ']' ) ;
175
180
}
176
181
177
182
return JSON . parse ( result ) ;
0 commit comments