Проблемы с Javascript и Firefox 4 - PullRequest
3 голосов
/ 17 июня 2011

Приведенный ниже код отлично работает в FF3.X и IE7 до 9, но не в FF4.

У меня есть этот код в 2 местах в моем файле:

                var arguments = "method=getoptions";
                arguments += "&dropzone=" + dictKey;
                arguments += "&format=disc";
                arguments += "&datasetid=" + datasetid;
                arguments += "&varnumber=" + varnumber;
                arguments += "&varSectionId=" + varSectionId;
                arguments += "&catindex=" + catIndex;
                arguments += "&defaultid=dv_cat_opts_default_body";
                arguments += "&mmocid=dv_cat_opts_mmoc_body";

                 alert(arguments);

, который производит

               method=getoptions&dropzone=Row_1&format=disc&datasetid=1&varnumber=206&varSectionId=FUV&catindex=&defaultid=dv_cat_opts_default_body&mmocid=dv_cat_opts_mmoc_body

и это правильно, но тот же код в другом месте в файле

                 var arguments = "method=getoptions";
                arguments += "&dropzone=" + dictKey;
                arguments += "&format=disc";
                arguments += "&datasetid=" + datasetid;
                arguments += "&varnumber=" + varnumber;
                arguments += "&varSectionId=" + varSectionId;
                arguments += "&catindex=" + catIndex;
                arguments += "&defaultid=dv_cat_opts_default_body";
                arguments += "&mmocid=dv_cat_opts_mmoc_body";

                 alert(arguments);

выводит это, что вызывает ошибку в моем ajax:

             [object Arguments]&dropzone=Row_1&format=cont&datasetid=1&varnumber=1125&varSectionId=FUV&catindex=&defaultid=dv_cont_opts_default_body&mmocid=dv_cont_opts_mmoc_body

Так в чем же дело с аргументами этого объекта?

Ответы [ 2 ]

4 голосов
/ 17 июня 2011

Переменная arguments - это специальный объект, доступный в функциях, он содержит все аргументы, переданные функции.

https://developer.mozilla.org/en/JavaScript/Reference/functions_and_function_scope/arguments

Другими словами, рассмотрим переменнуюимя arguments должно быть зарезервированным ключевым словом - точно так же, как вы никогда бы не назвали переменную if, не используйте имя переменной arguments, иначе вы получите неожиданные результаты.

Почему эта вещь здесь, вы можете спросить - она ​​позволяет вам писать свои функции, которые используют различное количество и порядок аргументов.Внутри вашей функции вы бы написали код, чтобы определить, какие аргументы были переданы и какие они есть.Требуется немного больше кода, но вы можете создать довольно гибкий код многократного использования с помощью этой техники.Ознакомьтесь с некоторыми внутренними функциями для Mootools или jQuery, и вы увидите, что эти популярные фреймворки интенсивно используют объект arguments.

Обратите внимание:

function alertError() {
 var exception = false;
 var message = false;
 for( var i = 0; i < arguments.length; i++ ) {
  if (typeof arguments[i] == 'object')
    exception = arguments[i];
  if (typeof arguments[i] == 'string')
    message = arguments[i];
 }

 if (message == false)
   message = 'No details';
 if (exception != false)
   message += ', exception: '+exception.message;

 alert('There has been an error: '+message);
}
alertError("No exceptions here!");
try {
 var t = t.doesnotexist;
} catch (e) {
 alertError(e, 'Testing');
}

Попробуйте здесь: http://jsfiddle.net/zwGMJ/

1 голос
/ 17 июня 2011

arguments - зарезервированная переменная в функциях JavaScript, которая содержит аргументы (также известные как параметры) функции. Так, например, function(a){alert(a);} будет таким же, как function(){alert(arguments[0]);}. Чтобы исправить эту ошибку, просто измените имя переменной на другое.

Ad @ м

...