使用Ajax更改用户密码的问题

时间:2011-08-10 20:22:49

标签: php jquery

我在尝试使用Ajax更改我正在处理的网站上的用户密码时遇到了一个奇怪的问题。基本上,我有一个表单,用户可以输入两次用户名,旧密码和新密码。从那里开始,JQuery接管并向PHP页面发出一个Ajax请求(我已经尝试过.post和.get,结果相同)。 PHP页面执行基本错误检查(确保填写所有字段,新密码匹配,新密码满足所有复杂性要求),然后使用simplexml_load_file()它向Web服务发出请求(用VB编写) ,请求是通过带有urlencoded get参数的URL,并返回实际更改用户密码的XML)。

在使用不符合复杂性要求的密码发出请求时,永远不会调用对Web服务的请求,并且Ajax请求可以正常工作。在缺少表单字段的情况下发出请求时,会发生同样的事情。

在通过手动输入get参数直接访问PHP页面来发出请求时,一切都按计划进行。

当我尝试使用Ajax以良好的密码和所有字段填充请求时,会出现问题。我收到以下错误:

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: path-to/jquery-1.6.2.min.js :: <TOP_LEVEL> :: line 18" data: no]

这是我的javascript:

function makePasswordRequest() {
email = $("#email").val();
currentPassword = $("#currentPassword").val();
newPassword = $("#newPassword").val();
newPasswordRetype = $("#newPasswordRetype").val();
$.get("../changeUserPassword.php", { 
        "email": email, 
        "currentPassword": currentPassword, 
        "newPassword": newPassword, 
        "newPasswordRetype": newPasswordRetype 
    },
     function(data){
       if(data.PasswordChanged){
            $("#notificationArea").addClass("success");
       }
       else{
            $("#notificationArea").addClass("failure");
       }
       $("#notificationArea").html(data.MessageString);
     }, "json");
};
$(document).ready(function(){
    $("#passwordChangeForm").submit(function(e){
        e.preventDefault();
        makePasswordRequest();
    });
});

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

实际上我认为JSON对象格式应该引用名称和值

   get("../changeUserPassword.php", { 
        "email": "email", 
        "currentPassword": "currentPassword", 
        "newPassword": "newPassword", 
        "newPasswordRetype": "newPasswordRetype" 
    },

答案 1 :(得分:-1)

好的,伙计们我已经解决了这个问题。问题似乎是Web服务正在发回某种对象(只包含一个字符串),虽然JSON在直接访问时看起来很好,但JavaScript无法解析它。我编辑了代码,从每个类似字符串的对象中拉出索引0处的数据,一切都运行得很漂亮。谢谢大家的帮助!