Zhenbin Xu wrote:
It should be revised to:

"
responseText:
If the state is not DONE, raise an INVALID_STATE_ERR exception and terminate 
these steps.

This doesn't seem very consistent with the other response properties though. Seems like .getResponseHeader and .getAllResponseHeaders work fine (without throwing) even in state HEADERS_RECEIVED and LOADING, so it seems better to let .responseText work fine there too.

Additionally, our API has for a long time been defined such that you can read .responseText all through the LOADING state in order to read streaming data. This has been advertised to authors so I would expect them to depend on that at this point and so if we started throwing here I would expect websites to stop working.

This makes even more sense in XHR2 when we have progress events and so the site gets notified as data comes in. (In fact, this is already the case in firefox where you get onreadystatechange notifications for the LOADING state every time data is received. We hope to change this to reflect the specification and use progress events as appropriate instead in FF3.1)

However throwing in the UNSENT and OPENED states are fine with me.

responseXML:
If the state is not at least OPENED, raise an INVALID_STATE_ERR exception and
terminate these steps.

I think we additionally need to throw in the OPENED state. Until all headers are received there is no way to know what document, if any, should be created so we need to either return null or throw until we're in state HEADERS_RECEIVED.

Though it does seem scary to start throwing in more states for this property as throwing more tends to break sites. So possibly we would have to go with returning null in the OPENED state even though that would be inconsistent with the other properties.


On a related note:
Can we specify exactly when .status and .statusText should throw? Currently the spec says to throw "if not available" which seems very implementation specific. If we say that it should throw unless the state is at least HEADERS_RECEIVED that should make things consistent.

Note that this would be unlikely to break sites due to more throwing. As things stand now the property is likely throw during the start of the OPENED state, but at some point during the state stop throwing and return a real result. So sites can't count on that happening at any predictable time before we're in the HEADERS_RECEIVED state anyway.

/ Jonas

/ Jonas

Reply via email to