initiate a web (HTTP) request in Javascript方法的例子比比皆是。但是,当我发起Web请求并且服务器返回空白响应时,Firefox至少会抛出错误:
XML解析错误:找不到根元素位置:http://example.com/service行号1,列1:1服务:1:1
我使用的功能类似于:
Win32
在这种特殊情况下,服务器没有任何东西可以返回,我希望如此。那么,如何构建我的客户端脚本来处理此响应而不抛出此错误?或者,更一般地说,我如何正确处理非XML响应?
答案 0 :(得分:2)
由于可能是一个可辩护的原因,Firefox将默认MIME类型设置为XML(不确定它是text/xml
还是application/xml
)。值得庆幸的是,XMLHttpRequest
对象有一个overrideMimeType
方法,我可以用它将MIME类型设置为text/plain
。
以下功能可以忽略响应,空白或其他:
function RequestGET(url, callback) {
var req = new XMLHttpRequest();
req.open("GET", url, true);
if (req.overrideMimeType)
req.overrideMimeType("text/plain");
req.send(null);
}
答案 1 :(得分:1)
responseXML
可能=== null
XMLHttpRequest.responseXML属性是一个只读值,它返回包含请求检索的HTML或XML的Document,如果请求不成功,尚未发送,则返回或null ,或者如果检索到的数据无法正确解析为XML或HTML。
以下之类的内容将捕获并处理我们可以预期的许多可能的回报。
var xhr = new XMLHttpRequest(),
handleResponses = function( x ) {
var s = x.status;
if ( s < 400 ) {
if ( s === 200 ) {
var rXML = x.responseXML;
if ( rXML !== null ) {
console.log( rXML );
} else {
console.error( "Not XML" );
console.log( x.response );
}
} else {
console.warn(
{ 204: "No Content",
304: "Not Modified" // etc.
}[ s ] || "Nothingness..."
);
}
} else {
console.error(
{ 400: "Bad Request",
404: "Not Found" // etc.
}[ s ] || "Oh snap!"
);
}
};
xhr.open( "GET", "https://example.com/service", true );
xhr.addEventListener( "error", function() {
// If this happens, the request effectively failed.
console.error( "The internet is empty" );
}, false );
xhr.addEventListener( "readystatechange", function() {
// Even if the request fails, this will happen.
if ( xhr.readyState === 4 ) {
handleResponses( xhr );
}
}, false );
xhr.send();
&#13;
答案 2 :(得分:0)
req.onreadystatechange=function() {
if (req.readyState===4 && req.status===200) {
var response=req.responseText;
}
};
这会将响应捕获到&#34;响应&#34;请求完成后变量
答案 3 :(得分:0)
或者,更一般地说,我如何正确处理非XML响应?
我会给尝试......抓住一个去。
try {
// parse response data
}
catch(error){
// handle parsing exception
}
finally{
// buy me a beer
}
也许这会起作用,但我会围绕哪个块包装异常处理?
function RequestGET(url) {
var req = new XMLHttpRequest();
// set callback for xhr state change events
xhr.onreadystatechange = function() {
if (req.readyState === 4) {
// request is completed
if(req.status === 200) {
// The request succeed!
try {
// parse response data
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(req.responseText,"text/xml");
// here your xml document object...
// > xmlDoc
}
catch(error){
// handle parsing exception
}
finally{
// buy me a beer
}
} else {
// The request did not succeed!
}
}
}
req.open("GET", url, true);
req.send();
}