2

約 1 年前に、ユーザー パスワードを変更するために PHP ページに ajax 呼び出しを行う JQuery/Javascript スクリプトを作成しました。今日の初めに、ajax 呼び出しが機能しなくなったという苦情が寄せられ始めました。パスワード変更フォームを送信しようとすると、次のエラーが表示されます。

JavaScript 引数 arg 0 [nsIDOMDocumentFragment.appendChild] を変換できませんでした http://www.site.com/js/jquery-1.4.4.min.js 行 124

このエラーが発生しても、ユーザーのパスワードが変更され、PHP からの出力は、本来あるべきものとまったく同じです...適切にフォーマットされた json 文字列:

{"Authenticated":{"0":"false"},"MessageString":{"0":"Your User Password Was Changed Successfully."},"PasswordChanged":{"0":"true"}}

このプロジェクトに関連するファイルは数か月間変更されておらず、このフォームは 1 日に少なくとも数回使用されているため、なぜ突然機能しなくなったのかわかりません。

これが私が実行しているスクリプトで、JQuery 1.4.4 で実行しています。

function makePasswordRequest() {
    email = jQuery("#email").val();
    currentPassword = jQuery("#currentPassword").val();
    newPassword = jQuery("#newPassword").val();
    newPasswordRetype = jQuery("#newPasswordRetype").val();
    jQuery.post("../changeUserPassword.php", { 
            email: email, 
            currentPassword: currentPassword, 
            newPassword: newPassword, 
            newPasswordRetype: newPasswordRetype 
        },
         function(data){
           if(data.PasswordChanged[0] == true || data.PasswordChanged[0] == "true"){
                jQuery("#notificationArea").removeClass("failure");
                jQuery("#notificationArea").addClass("success");
           }
           else{
                jQuery("#notificationArea").removeClass("success");
                jQuery("#notificationArea").addClass("failure");
           }
           jQuery("#notificationArea").html(data.MessageString);
         }, "json");
};
function resetPasswordRequest() {
    email = jQuery("#email2").val();
    jQuery.post("../resetUserPassword.php", { 
            email: email,  
        },
         function(data){
           if(data.PasswordChanged[0] == true || data.PasswordChanged[0] == "true"){
                jQuery("#notificationArea2").removeClass("failure");
                jQuery("#notificationArea2").addClass("success");
           }
           else{
                jQuery("#notificationArea2").removeClass("success");
                jQuery("#notificationArea2").addClass("failure");
           }
           jQuery("#notificationArea2").html(data.MessageString);
         }, "json");
};
jQuery(document).ready(function(){
    jQuery("#passwordChangeForm").submit(function(e){
        e.preventDefault();
        makePasswordRequest();
    });
    jQuery("#passwordResetForm").submit(function(e){
        e.preventDefault();
        resetPasswordRequest();
    });
});

特に昨年はうまく機能していたので、何が問題なのかわかりません。どんな助けでも大歓迎です!

4

2 に答える 2

1

これが問題になるかどうかはわかりませんが、1 つの要素の内部 HTML を次のように設定する場合:

jQuery("#notificationArea").html(data.MessageString);

data.MessageString は {"0":"Your User Password Was Changed Successfully."} ですので、それは問題ではないでしょうか? data.MessageString[0] は必要ありませんか?

于 2012-06-06T18:55:20.243 に答える
0

問題はjqueryがJSONであることを検出せず、JSONを適切に変換しないことにあると確信しています。出力の直前に適切なヘッダーを送信してみてください。

header('Content-Type: application/json');

変更されたに違いないのは、サーバーの構成です。あなたに本当に依存していないのはどれですか

于 2012-06-06T18:58:22.557 に答える