Переменная не определена - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь этот код обновить запасной плагин. Как я могу получить доступ к переменной a вне первой функции? Я могу переопределить переменную, чтобы сделать обновление, правильно?

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    var a ="success";
                } else 
                    var a = "Error";
            }
        });
return false;
    });
});
</script>

<script type='text/javascript'>
$(document).ready(function () {
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined
});
</script>

Ответы [ 5 ]

3 голосов
/ 08 ноября 2011

Либо переместите код во втором блоке document.ready в первый (что сделает переменную a доступной для вашего вызова .tipsy()), либо сделайте переменную a глобальной.

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else 
                    a = "Error";
            }
        });
return false;
    });
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a });

});
</script>

OR

<script type="text/javascript">
var a = "Login";
$(document).ready(function () {
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else 
                    a = "Error";
            }
        });
return false;
    });
});
</script>

<script type='text/javascript'>
$(document).ready(function () {
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined
});
</script>

Обратите внимание, что я удалил объявление var из обратного вызова об успешном завершении вашего AJAX-вызова.

UPDATE

Чтобы передать обновленное значение a типу, вам нужно выполнить вызов .tipsy() в функции обратного вызова. Вы также можете запустить его как есть и обновить плагин tipy в функции обратного вызова (однако я не знаком с плагином и не знаю, как это сделать):

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else {
                    a = "Error";
                }
                $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a });
            }
        });
return false;
    });
});
</script>
1 голос
/ 09 ноября 2011

Невозможно изменить свойство fallback ваших объектов Tipsy после того, как они были созданы, не взломав сам плагин tipsy .

Учитывая, что параметр fallback является строкой, он интерпретируется, как только выполняется функция $().tipsy({...}). Таким образом, изменение значения переменной a впоследствии не изменит параметр fallback.

Сначала я подумал, что непосредственное обновление свойства fallback из объекта $.fn.tipsy.defaults сделает это, но когда создается новый объект Tipsy, свойство fallback в основном копируется в него, поэтому оно будет хранить начальное значение fallback навсегда.

Одним из решений может быть форк проекта Tipsy и изменение свойства fallback, чтобы оно принимало либо строку, либо function(). Вот так можно было бы сделать что-то вроде: fallback: function (){ return a;}.

0 голосов
/ 08 ноября 2011

1) почему у вас есть 2 Document.ready ??

2) вы можете использовать глобальный параметр или $ .data для передачи данных.

3) для вашего решения - объявитеvar a ="Login"; вне или используйте самозаполняющуюся функцию, которая сохраняет область для глобальной переменной.

0 голосов
/ 08 ноября 2011

Вы можете сделать это глобальным.Это или нет то, что вы должны делать, зависит.

Если все это работает в doc ready, нет никакой причины иметь глобальный;Вы можете просто запустить код из второго документа уже после успешного выполнения AJAX (или завершить, если он соответствует вашим потребностям).

Трудно сказать;не знаю, насколько близки фрагменты к реальности.

0 голосов
/ 08 ноября 2011

Переместите переменную a за пределы функции готовности:

<script type="text/javascript">
    var a ="Login";
    $(document).ready(function () {

Кроме того, не используйте ключевое слово var в своей функции успеха.Вы повторно объявляете переменную, а не устанавливаете значение переменной, определенное в начале функции готовности.

 success: function (data) {
            if (data.livre === 'complete') {
                a ="sucess";
            } else 
                a = "Error";
        }
...