XMLHttpRequest ResponseText未定义

时间:2013-12-22 18:38:03

标签: javascript php ajax xhtml

我在XHTML,PHP和JavaScript之间徘徊了一段时间。我的目的是让用户从表单菜单中选择一个选项,并使用单独的PHP页面的内容更新DIV的innerHTML。例如,选择“Cat”会调用“animaloptions.php?species = cat”,其结果将被抛入DIV块。但是,如果我通过PHP的Content-Type函数指定调用页面的Header,那么我的代码就会失败。

以下是我的JavaScript代码:

function showOptions(str) {
    if (str == "") {
        document.getElementById("mainArea").innerHTML = "";
        return;
    }

    xmlhttp = new XMLHttpRequest();

    if (xmlhttp) {
        xmlhttp.open("GET", "animaloptions.php", true);
        xmlhttp.setRequestHeader("Content-Type", "application/xhtml+xml; charset=utf-8");

        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("mainArea").innerHTML = xmlhttp.responseText;
            }
            else {
                document.getElementById("mainArea").innerHTML = "Loading…";
            }
        }

        xmlhttp.send("species=" + str);
    }
}

如果我在调用它的页面中不包含以下PHP代码,则此代码有效:

header('Content-Type: application/xhtml+xml; charset=utf-8');

这样做会阻止responseText加载,大概是因为readyState,status或两者都与我指定的值不匹配。如果我不检查那些条件,那么responseText就是未定义的。

我的猜测是要求PHP发送原始HTTP标头将阻止我的XMLHttpRequest按预期运行。问题是我需要发送这个原始头,因为Web服务器没有自己将页面标识为UTF-8(谢谢你,未命名的Web主机),并且因为我的Web主机,所以包括标准<?xml version=1.0 encoding=utf-8 ?>是不可能的在PHP中打开短标签。 (是的,我尝试使用echo将其打入页面,但PHP由于某种原因自动将其转换为注释行,这是一个单独的问题。)

我是否只是滥用XMLHttpRequest对象?有没有切实可行的方法呢?

修改

我应该明确指出“不工作”的含义。在Safari的开发工具中,我看到animaloptions.php作为资源添加,其代码由PHP处理,但其内容不会添加到DIV块(或任何块)。如果是,那么我将不再将此页面视为单独的资源。如果我在JavaScript代码中使用responseText,则浏览器会抛出DOM错误12(指定了无效或非法的字符串)。如果我使用responseXML,那么我没有错误,也没有文本,但是animaloptions.php在资源下显示的都是相同的。

0 个答案:

没有答案