2

メインページのdivにsignup.phpページをロードしています。すべての要素 (フォーム/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>

上記をメインページ (index.php) の #container div にロードするために使用される Jquery:

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

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

編集:OKみんな-更新:load()関数をsignup.phpページのajax呼び出しに置き換えてから、ajaxのhtml応答を必要なdivに配置するように設定しようとしました-効果は同じです. 必要に応じて html を取得しますが、signup.php ページからの ajax エラーでスパンが更新されません。div 内でページをロードすることについて明確にした人はいますか? load() が新しいコンテンツを挿入する前にタグを削除することは知っていますが、ページ全体が読み込まれている限り問題にはならないと思いました-何かアイデアはありますか? プリーズプリーズプリーズ!

解決済み: 答えが見つかりました: signup.php がインデックス ページに読み込まれると、同じ ID を持つ 2 つのスパンが存在するため、ブラウザーが混乱して何もしなくなります。これは、スタンドアロンとしても単一のブラウザーとしても機能し、すべてのコンソール/アラートを起動する理由を説明しています-入力してくれてありがとう!

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 に答える