JQuery函数突然停止工作,转换Javascript参数时出错

JQuery函数突然停止工作,转换Javascript参数时出错,javascript,jquery,Javascript,Jquery,大约一年前,我编写了一个JQuery/Javascript脚本,它对PHP页面进行ajax调用以更改用户密码,从那时起,它一直工作得非常出色。今天早些时候,我开始抱怨ajax调用不再有效。当我去提交密码更改表单时,我收到以下错误: 无法转换JavaScript参数arg 0[nsIDOMDocumentFragment.appendChild] 第124行 即使发生此错误,用户的密码也会更改,并且PHP的输出与应该的完全一致。。。格式正确的json字符串: {"Authenticated":{"

大约一年前,我编写了一个JQuery/Javascript脚本,它对PHP页面进行ajax调用以更改用户密码,从那时起,它一直工作得非常出色。今天早些时候,我开始抱怨ajax调用不再有效。当我去提交密码更改表单时,我收到以下错误:

无法转换JavaScript参数arg 0[nsIDOMDocumentFragment.appendChild] 第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();
    });
});

我想不出问题出在哪里,尤其是因为这在过去的一年里一直运作良好。任何帮助都将不胜感激

我不知道这是否会有问题,但当您将一个元素的内部HTML设置为:

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

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

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

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

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

在测试之前您是否更新到了1.7?在开发过程中,我们使用了JQuery 1.4.4,而该站点仍在运行1.4.4。站点中的任何内容都不应该更改。ajax域是否更改了?编辑:我想知道这是否与新发布的FF13有关?当没有任何变化时,事情不会破裂。一定有什么改变了。找到它,你就可以修复它。如果你能使用一个未缩小的jQuery版本,这会有所帮助。这样可以更容易地追溯堆栈并找出代码中发生错误的确切位置。在他的帖子中,jquery将假定它是json,而不管内容类型标题如何。我花了几个小时试图解决相同的问题(但使用$.ajax),标题就是解决方案。这只是一些尝试,而不是一个明确的解决方案:)如果您查看jQuery文档,jQuery首先查看响应头中的MIME类型,并尝试将响应转换为该类型。但由于它们指定了“json”,因此会覆盖标头。我认为这就是为什么您总是可以从服务器返回纯文本,但是设置数据类型允许正确的转换。但我不确定这有多准确。但这就是为什么服务器上对返回MIME类型的更改不会影响这种情况——他们将其设置为期望“json”有趣。对于该代码,它不应该出错,但它将附加字符串
“[对象]”
,而不是实际的消息。这表明OP代码可能不是实际代码。但是jquery知道如何将对象转换为字符串吗?它不会失败/抱怨吗?我现在不能测试它,但是如果它知道转换它,那么它不会失败,只是表明我不确定宇宙中发生了什么变化,但这解决了我的问题。在没有[0]的情况下,它已经工作了一年,但由于某种原因,如果没有[0],它就会呕吐。谢谢你的修复!是的,这就是奇怪的地方-为什么它以前会起作用?如果您在其他属性(如data.PasswordChanged)上使用[0],我认为您在任何地方都需要它来进行设置。不管怎样,很高兴这能解决它!这真奇怪。我无法解释。不过,我完全可以让它在没有
[0]
的情况下工作。