Microsoft JScript运行时错误:预期的功能

时间:2011-12-30 16:35:56

标签: javascript jquery ajax function

我有以下javascript函数,其中包含一些jquery。当我调用 createAppointmentConfirm 函数时,它会尝试调用 SendMail(id)函数,但会抛出错误:

  

“Microsoft JScript运行时错误:预期功能”

Firefox调试器抛出错误:

  

SendMail不是函数[在这个错误上打破]   的SendMail(data.Message);

这是代码。谢谢你的帮助。

function createAppointmentConfirm(data) {
    if (data.Error) {
        alert(data.Message);
    } else {
        if ($('#sendMail').attr('checked') == 'checked') {
            SendMail(data.Message);
        }
        RefreshAppointmentList();
    }
}
function SendMail(id) {
    $.ajax({
        url: $('#sendMail').attr('title'),
        data: { id: id },
        type: "POST",
        beforeSend: function () {
            $('#sendingMail').dialog({ modal: true });
        },
        success: function (data) {
            if (data.Error) {
                alert(data.Message);
            }
            $('#sendingMail').dialog("close");
        },
        error: function () {
            alert("Error sending mail");
            $('#sendingMail').dialog("close");
        }
    });
}

1 个答案:

答案 0 :(得分:11)

解释

哦,小伙子,我喜欢这些问题,主要是因为我做了一些研究和示例代码! :)

所以,首先,让我们解释你的代码发生了什么。

您的代码没有技术上错误,只是您遇到了命名冲突,或者您尝试调用的函数超出了调用它们的范围。 它也可能是你链接两个单独的javascript文件,其中一个没有在运行时正确链接,可能是因为拼写错误。

以下是一些关于这些问题的文章:

Here's a debugging guide,更准确地说,请查看标题下方的底部 Runtime error messages小标题xyz is not defined

  

未定义xyz
  当您的JavaScript代码引用不存在的变量或对象时,会发生此错误。   例如,您将收到以下错误。 (请注意,分配的变量是Test,而与alert方法一起使用的变量是Text。)

var Test="This is a test; alert (Text);
     

另一个常见错误是使用错误的大写时   指变量和对象。此代码导致错误,   即使您正确拼写了变量名称:

var Test="This is a test; alert (test);

或者,因为他们没有提到:你可能已经声明了一个函数和一个变量,两者都有相同的名称。


解决方案

当您按下HTML面板中的“go”提交按钮时,JSFiddle中的以下示例将触发错误/运行代码。

解决方案非常适合您。你没有发布完整的代码,所以我无法帮你找到确切的位置。

如果我猜错了,我会说你已经在名称为SendMail的地方声明了一个变量,并且该脚本假定你指的是那个。

我创建了一个在JSFiddle中发生命名冲突的示例。

Naming conflict example

function SendMail(iId) {
    //Send the mail information to a server page that will pass it along
    //For this example, we'll pretend it returned an object

    var oReturned = {
        "Error": null,
        "Message": "Mail has been sent."
    };
    SendDebugMessages(oReturned.Message);
}


function SendDebugMessage(msg){
    $("#debug").prepend("<div>"+msg+"</div>");
}

在这里,我试图调用SendDebugMessage()函数,
但是当我打电话给我时,我有点粗心,并添加s,因此它变为SendDebugMessages()。 Whops。

对象和变量也可能发生。你只是不知道它来自哪里。

当然,您需要做的就是解决它,将其更改回正确的函数名称

Here's an example我认为代表您的问题,一个函数和一个共享相同名称的变量。

var SendDebugMessage = "something";

function SendDebugMessage(msg){
    $("#debug").prepend("<div>"+msg+"</div>");
}

一种直接的解决方法:更改其中一个的名称。

Here's a working example, without any errors..