Ошибка выполнения Microsoft JScript: ожидается функция - PullRequest
6 голосов
/ 30 декабря 2011

У меня есть следующая функция javascript с некоторыми jquery. Когда я вызываю функцию createAppointmentConfirm , она пытается вызвать функцию SendMail (id) , но выдает ошибку:

«Ошибка времени выполнения Microsoft JScript: ожидаемая функция»

А отладчик Firefox выдает ошибку:

SendMail не является функцией [Break On This Error] 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 Ответ

11 голосов
/ 05 января 2012

Объяснение

О, мальчик, мне нравятся такие вопросы, в основном потому, что я провожу некоторые исследования и пример кода! :)

Итак, во-первых, давайте объясним, что происходит с вашим кодом.

В вашем коде нет ничего технически неправильного, просто у вас либо конфликт имен, либо функции, которые вы пытаетесь вызвать, выходят за рамки вызывающей их области. Возможно также, что вы связываете два отдельных файла javascript, и один из них не связан должным образом во время выполнения, возможно, из-за орфографической ошибки.

Вот несколько статей о проблемах:

Вот руководство по отладке , а если быть более точным, взгляните вниз под заголовком 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);

Или, поскольку они не упоминают: возможно, вы объявили функцию и переменную с одинаковыми именами.


Решение

Следующие примеры в JSFiddle будут вызывать ошибки / запускать код при нажатии кнопки отправки «go» на панели HTML.

Решение в значительной степени зависит от вас. Вы не опубликовали весь код, поэтому я не могу помочь вам определить точное место.

Если бы я предположил, я бы сказал, что вы где-то объявили переменную с именем SendMail, и сценарий предполагает, что вы ссылаетесь на эту переменную.

Я создал пример, где конфликт имен происходит в JSFiddle.

Пример конфликта имен .

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.

Это также может происходить с объектами и переменными. Вы просто не будете знать, откуда он.

Конечно, все, что вам нужно сделать, чтобы решить эту проблему, это вернуть обратно правильное имя функции

Вот пример , который, я думаю, представляет вашу проблему , функцию и переменную с одинаковым именем.

var SendDebugMessage = "something";

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

Вид простого исправления: измените имя на одном из них.

Вот рабочий пример, без ошибок ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...