我有一个旧的Web应用程序,可以在php中生成XML文件。 XMLHttpRequest对象(AJAX)请求此XML。一切正常。但今天有一些服务器升级和Web应用程序崩溃了一点。
问题是代码中存在与XMLHttpRequests相关的检查。 1)如果我有响应,而不是根据其内容类型正确解析它。
var contentType = xhr.getResponseHeader("Content-Type");
//build the json object if the response has one
if(contentType == "application/json") {
response = JSON.parse(xhr.responseText);
}
//get the dom element if the response is XML
else if(contentType == "text/xml") {
response = xhr.responseXML;
} else { //by default get the response as text
response = xhr.responseText;
}
以下是服务器现在返回的问题:
text/xml;charset=UTF-8
而不是
text/xml
好的我可以改变这一行,错误就消失了。但我想知道为什么服务器升级(bluehost)会对此产生影响。
这是PHP / MySQL环境。
答案 0 :(得分:1)
两者都是有效的内容类型。内容类型可以由Web服务器软件(例如Apache)或脚本(PHP)设置。我假设它是PHP,因为你的问题上有标记。
如果您控制服务器上的脚本并想要指定内容类型,则可以通过添加以下行来在PHP中轻松完成:
header('Content-Type: text/xml');
这必须在脚本发送任何其他输出之前发生,因为标题出现在http响应中的内容之前。如果未在PHP脚本中设置标头,则Web服务器将选择一个。
如果您不控制生成XML或服务器的脚本,那么您只需要接受升级系统很常见,这可能会对您自己的应用程序产生影响。
答案 1 :(得分:1)
只是为了补充Steve E的答案," charset = UTF-8"部分是指定一个字符集。
没有更好的解释unicode(UTF-8是unicode的实现)和字符集,然后是Joel on Software,here上的字符集(顺便说一下,Joel也创建了Stack Overflow)。简而言之,字符集定义了可以在文本中使用的字符集。 Unicode是一个字符集,几乎支持所有国际语言。 UTF-8指定如何以字节为单位实现Unicode字符集(因此对于UTF-8,Unicode字符需要1-4字节)。当您看到乱码文本(例如?s而不是字符)时,通常是因为文档没有以正确的字符编码进行解释。
在内容类型标头中包含编码实际上是最佳做法,因此我将其保留为" text / xml; charset = UTF-8"。 Bluehost可能会更新其默认设置(即/它们为xml文档显示的默认内容类型),这会导致更改。顺便说一句,术语字符集和编码有时可以互换使用,但是当你指定" charset = UTF-8"您正确指定编码(UTF-8是编码,Unicode是字符集)。