2

大约一年前,我编写了一个 JQuery/Javascript 脚本,该脚本对 PHP 页面进行 ajax 调用以更改用户密码,从那时起它一直运行良好。今天早些时候,我开始抱怨 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"}}

与该项目相关的文件在几个月内都没有更改,并且该表单每天至少使用几次,所以我不确定它为什么突然停止工作。

这是我正在运行的脚本,我正在使用 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

我不知道这是否会成为问题,但是当您使用以下内容设置一个元素的内部 HTML 时:

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

data.MessageString 是{“0”:“您的用户密码已成功更改。”},所以我想知道这是否有问题?你不想要 data.MessageString[0] 吗?

于 2012-06-06T18:55:20.243 回答
0

我很确定问题在于 jquery 没有检测到它的 JSON 并且没有正确转换 JSON。尝试在输出之前发送正确的标题。

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

必须改变的是您的服务器的配置。这并不取决于你

于 2012-06-06T18:58:22.557 回答