我在尝试使用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();
});
});
有什么想法吗?
答案 0 :(得分:1)
实际上我认为JSON对象格式应该引用名称和值
get("../changeUserPassword.php", {
"email": "email",
"currentPassword": "currentPassword",
"newPassword": "newPassword",
"newPasswordRetype": "newPasswordRetype"
},
答案 1 :(得分:-1)
好的,伙计们我已经解决了这个问题。问题似乎是Web服务正在发回某种对象(只包含一个字符串),虽然JSON在直接访问时看起来很好,但JavaScript无法解析它。我编辑了代码,从每个类似字符串的对象中拉出索引0处的数据,一切都运行得很漂亮。谢谢大家的帮助!