2

我正在将一个 signup.php 页面加载到我主页上的 div 中。所有元素(表单/javascript 等)在加载的页面中都可以正常工作。唯一的问题是,一旦 php 脚本返回 ajax 响应,我就无法让它显示在 div 上。

当我独立运行 signup.php 页面时会显示响应,但在将其加载到另一个页面时不会显示。我正在使用 load() 函数来执行加载 - 我知道 load() 会剥离标签等,但在加载整个页面时不会,这就是我正在做的,所以我认为它应该可以工作。

我已经检查过响应文本确实来自 PHP 脚本,即使在主页上加载时也是如此 - 我只是无法让它显示在跨度中。

这是正在加载的注册页面 (signup.php) 的 javascript 代码(尚未包含 php 作为其工作):

function signup(){
var e = _("email").value;
var p1 = _("pass1").value;
var p2 = _("pass2").value;
var status = _("status");
if( e == "" || p1 == "" || p2 == ""){
    status.innerHTML = "Fill out all of the form data";
    console.log(status.innerHTML);
} else if(p1 != p2){
    status.innerHTML = "Your password fields do not match";
} else {
    status.innerHTML = 'please wait ...';
    var ajax = ajaxObj("POST", "signup.php");
    ajax.onreadystatechange = function() {
        if(ajaxReturn(ajax) == true) {
            if(ajax.responseText != "OK"){
            alert(ajax.responseText);
            console.log(ajax.responseText);
                status.innerHTML = ajax.responseText;
                _("signupbtn").style.display = "block";
            } else {
            console.log(ajax.status);
                console.log(ajax.responseText);

                _("p1").innerHTML = "Please check your email inbox and junk mail box at <u>"+e+"</u> in a moment to complete the sign up process by activating your account. You will not be able to do anything on the site until you successfully activate your account.";
            }
        }
    }
    ajax.send("e="+e+"&p="+p1);
}

和 HTML 表单:

         <form name="signupform" id="signupform" onsubmit="return false;">

      <div>Email Address:</div>
    <input id="email" type="text" class="searchbox" onfocus="emptyElement('status')" onkeyup="restrict('email')" maxlength="88">
    <div>Create Password:</div>
    <input id="pass1" type="password" class="searchbox" onfocus="emptyElement('status')" maxlength="16">
    <div>Confirm Password:</div>
    <input id="pass2" type="password" class="searchbox" onfocus="emptyElement('status')" maxlength="16">
      </form>           
    <br> <a href="#" alt="Signup" onclick="signup()">Create Account</a><p>
<span id="status" class="statuserror">This is where i want the response to show</span>

以及用于将上述内容加载到主页上的#container div 中的 Jquery (index.php):

function becometutor(){
$('#container').slideUp(200);
$('#searchBar').slideUp(200);
setTimeout(function(){
$('#container').load("signup.php")}, 200);

$('#container').slideDown(200);
}

编辑:好的,伙计们 - 所以更新:我尝试用 signup.php 页面的 ajax 调用替换 load() 函数,然后设置将 ajax 的 html 响应放入我想要的 div 中 - 效果是一样的. 我得到了我想要的 html,但是跨度没有随着 signup.php 页面中的 ajax 错误而更新。有没有人对在 div 中加载页面有任何澄清 - 这是不可以吗?我知道 load() 在放入新内容之前会去除标签 - 但我认为只要整个页面正在加载,那么它应该不是问题 - 有什么想法吗?求求求求!这让我快疯了!

已解决:找到答案:当 signup.php 加载到索引页面时,有两个具有相同 id 的 span,因此浏览器会感到困惑并且什么也不做。这解释了为什么它也可以作为单个浏览器独立工作,并且仍然会触发所有控制台/警报 - 感谢您的输入!

4

1 回答 1

0

我会对此发表评论,但可惜我的代表不够高,所以我必须提交答案。

问题不在于 load() 或在 div 中加载页面。我已经毫无问题地模拟了所有这些。

如果没有看到所有的 ajax 代码,就很难知道发生了什么。关于这一点:

ajax.onreadystatechange = function() {
    if(ajaxReturn(ajax) == true) {
        if(ajax.responseText != "OK"){
        alert(ajax.responseText);
        console.log(ajax.responseText);
            status.innerHTML = ajax.responseText;
            _("signupbtn").style.display = "block";
        }

警报和console.log 触发了吗?您是否可以将状态设置为此功能内部或外部的任何内容?

于 2013-05-15T15:54:10.307 回答