Ошибка: значение свойства 'warn_redirect' является нулевым или неопределенным, а не объектом функции

0

У меня есть страница в одном из моих приложений ASP.NET(VB), которая полагается на сторонний сервис, который живет, и я использую jQuery для отображения наложения, если эта служба окажется недоступной. Я использовал тот же подход для других предупреждений в приложении - разница в этом заключается в том, что он должен перенаправляться после того, как пользователь нажимает кнопку во всплывающем окне предупреждения, чтобы удалить оверлей. По какой-то причине я получаю сообщение об ошибке "Ошибка: значение свойства" warn_redirect "имеет значение null или undefined, а не объект Function".

Любая помощь очень ценится! Мой код:

JQuery

function warn_redirect(msg, title, nextpage) {
    // show modal div
    //alert(obj.id);
    $("html").css("overflow", "hidden");
    $("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>");
    $("#popup_overlay").addClass("popup_overlayBG");
    $("#popup_overlay").fadeIn("slow");

    // build warning box
    $("#popup_window").append("<h1>" + title + "</h1>");
    $("#popup_window").append("<p id='popup_message'><center>" + msg + "</center></p>");
    $("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'>OK</button></center></div>");

    // attach action to button
    $("#continue").click(popup_remove_redirect(nextpage));

    // display warning window
    popup_position(400, 300);
    $("#popup_window").css({ display: "block" }); //for safari using css instead of show
    $("#continue").focus();
    $("#continue").blur();
}

function popup_remove_redirect(nextpage) {
$("#popup_window").fadeOut("fast", function () { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); });
$("body", "html").css({ height: "auto", width: "auto" });
$("html").css("overflow", "");
window.location.href = nextpage;

}

Вот код вызова VB.NET:

If Status = "DOWN" Then
            Dim clsUtility As New Utility
            clsUtility.Emailer("[email protected]", "[email protected]", "", "", "The Service Is Down!", "Please investigate")
            Dim ScriptString As String = "<script language='javascript'>"
            ScriptString += "warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');"
            ScriptString += "</script>"
            ClientScript.RegisterStartupScript(Me.GetType, "warnscript", ScriptString)
            'Response.Redirect("AnotherPage.aspx?ID=" & Session("SelKey") & "&UN=" & Header1.UserNumber) //this didn't work either
        End If

2 ответа

0

Это связано с тем, что определение вашего сценария загружается после вызова StartupScript.

Вы должны включить ваш.js файл перед StartupScripts на своей странице. Посмотрите на "исходный код" в своем браузере, и вы увидите кучу скриптовых тегов:

<script src="/ScriptResource.axd?d=eoXLgy ... 847d" type="text/javascript"></script>

Эти теги - это скрипты, вставленные в скрипты StartUp. Убедитесь, что ваш скрипт вставлен перед этим в ваш.aspx (или.master). Возможно, вам придется включить их в главный тег.

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

window.MyFunctions = {
   warn_redirect = function (msg, title, nextpage) { /* your code */ }
}

И назовите это так: MyFunctions.warn_redirect.

Таким образом, вы лучше организовываете его и избегаете возможных столкновений с другими функциями с тем же именем.

  • 0
    Большое спасибо за отзыв. Я переместил ссылки на файл библиотеки jQuery и мой исходный файл jQuery в заголовок, но все еще получал ту же ошибку.
  • 0
    Затем вы должны открыть консоль javascript браузера в инструментах разработчика браузера (F12 в Chrome или IE или Firefox + Firebug) и обновить страницу, чтобы увидеть, есть ли какая-либо ошибка. (Я предпочитаю Chrome или Firefox + Firebug, чем IE). Иногда из-за ошибки в другом файле .js код следующих файлов не работает.
Показать ещё 1 комментарий
0

Попробуй это,

If Status = "DOWN" Then
            Dim clsUtility As New Utility
            clsUtility.Emailer("[email protected]", "[email protected]", "", "", "The Service Is Down!", "Please investigate")
            Dim ScriptString As String = "<script language='javascript'>"
            ScriptString += "window.onload = function(){warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');};"
            ScriptString += "</script>"
            ClientScript.RegisterStartupScript(Me.GetType, "warnscript", ScriptString)
            'Response.Redirect("AnotherPage.aspx?ID=" & Session("SelKey") & "&UN=" & Header1.UserNumber) //this didn't work either
        End If

Поскольку JQuery уже включен, вы также можете использовать приведенный ниже оператор.

ScriptString += "$(function(){warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');});"
  • 0
    Спасибо за предложения! Я пробовал оба пути, но все еще получаю ту же ошибку, что и раньше.
  • 0
    Вы также можете предшествовать приведенному выше коду с другим RegisterStartupScript который загружает файл JavaScript. ClientScript.RegisterStartupScript(Me.GetType, "warnscriptfile", "<script src='myfile.js' />")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню