Bug 100106, XMLHttpRequest.responseText empty if XML parsing error. r=harishd, sr=vidur.

This commit is contained in:
heikki%netscape.com 2001-09-17 20:22:16 +00:00
parent 5168e369db
commit c7f327d9d9
3 changed files with 131 additions and 6 deletions

View File

@ -806,12 +806,7 @@ nsXMLHttpRequest::OnDataAvailable(nsIRequest *request, nsISupports *ctxt, nsIInp
NS_ABORT_IF_FALSE(mContext.get() == ctxt,"start context different from OnDataAvailable context");
PRUint32 totalRead;
nsresult result = inStr->ReadSegments(nsXMLHttpRequest::StreamReaderFunc, (void*)this, count, &totalRead);
if (NS_FAILED(result)) {
mResponseBody.Truncate();
}
return result;
return inStr->ReadSegments(nsXMLHttpRequest::StreamReaderFunc, (void*)this, count, &totalRead);
}
/* void onStartRequest (in nsIRequest request, in nsISupports ctxt); */

View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!DOCTYPE doc [
<!ELEMENT d (p)>
<!ATTLIST d id ID #IMPLIED>
<!ELEMENT p (#PCDATA)>
]>
<doc>
<foo xmlns="foobar">One</foo> <x:bar xmlns:x="barfoo">Two</x:bar>
<d id="id3">Three</a></d>
</doc>

View File

@ -0,0 +1,120 @@
<!--
- The contents of this file are subject to the Mozilla Public
- License Version 1.1 (the "License"); you may not use this file
- except in compliance with the License. You may obtain a copy of
- the License at http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS
- IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- implied. See the License for the specific language governing
- rights and limitations under the License.
-
- The Original Code is Mozilla Test Cases.
-
- The Initial Developer of the Original Code is Netscape Communications
- Corp. Portions created by Netscape Communications Corp. are
- Copyright (C) 2001 Netscape Communications Corp. All
- Rights Reserved.
-
- Contributor(s):
-->
<html>
<head><title>Asynchronous GET test</title>
<style type="text/css">
.box {
display: box;
border: 1px solid black;
margin-bottom: 0.5em;
}
.boxheader {
font-weight: bold;
color: maroon;
}
pre {
margin-left: 2em;
}
</style>
<script type="text/javascript">
var p;
try {
p = new XMLHttpRequest();
} catch (e) {
p = new ActiveXObject("Msxml2.XMLHTTP");
}
var interactiveCount = 0;
function myfunc()
{
if (p.readyState == 3) {
interactiveCount++;
}
if (p.readyState != 4)
return;
document.getElementById("id1").firstChild.nodeValue = p.responseText;
if (p.responseXML) {
var str;
try {
var s = new XMLSerializer();
var d = p.responseXML;
str = s.serializeToString(d);
} catch (e) {
str = "@@TODO@@";
}
document.getElementById("id2").firstChild.nodeValue = str;
}
document.getElementById("id3").firstChild.nodeValue = p.getAllResponseHeaders();
document.getElementById("id4").firstChild.nodeValue = p.status;
document.getElementById("id5").firstChild.nodeValue = p.statusText;
document.getElementById("id6").firstChild.nodeValue = p.readyState;
document.getElementById("id7").firstChild.nodeValue = interactiveCount;
}
// p.onload would also work in Mozilla
p.onreadystatechange = myfunc;
try {
// Needed for Mozilla if local file tries to access an http URL
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
// ignore
}
p.open("GET", "invalid.xml");
function aLittleDelay()
{
p.send(null);
}
setTimeout(aLittleDelay,0);
</script>
</head>
<body>
<h1>Asynchronous GET test</h1>
<div class="box"><span class="boxheader">responseText</span>
<pre id="id1">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">responseXML serialized</span>
<pre id="id2">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">getAllResponseHeaders()</span>
<pre id="id3">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">status</span>
<pre id="id4">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">statusText</span>
<pre id="id5">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader">readyState</span>
<pre id="id6">@@No result@@</pre>
</div>
<div class="box"><span class="boxheader"># of times onreadystatechanged handler called with INTERACTIVE status</span>
<pre id="id7">@@No result@@</pre>
</div>
</body>
</html>