Как я могу проверить, загружается ли плагин jQuery?

Неустранимая ошибка: вызов функции-члена ... на не-объект

происходит с кодом, подобным xyz->method(), где xyz не является объектом и, следовательно, method не может

Это фатальная ошибка, которая остановит сценарий (уведомление о прямой совместимости: это станет захватывающей ошибкой, начиная с PHP 7).

Чаще всего это знак что в коде отсутствуют проверки условий ошибок. Убедитесь, что объект фактически является объектом перед вызовом его методов.

Пример типичного будет

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

В приведенном выше примере запрос не может и prepare() назначит false на $statement. Попытка вызвать метод execute() приведет к Fatal Error, потому что false является «не объектом», потому что значение является логическим.

Выясните , почему ваша функция вернула логическое значение вместо объекта. Например, проверьте объект $pdo для последней произошедшей ошибки. Подробности о том, как отлаживать это, будут зависеть от того, как обрабатываются ошибки для конкретной рассматриваемой функции / объекта / класса.

Если даже сбой ->prepare не выполняется, то ваш дескриптор

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

базы данных

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

не попал в текущий объем . Найдите, где он определился. Затем передайте его как параметр, сохраните его как свойство или поделите его через глобальную область.

Другой проблемой может быть условное создание объекта, а затем попытка вызова метода вне этого условного блока. Например,

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

Пытаясь выполнить метод вне условного блока, ваш объект не может быть определен.

Вопросы, относящиеся:

217
задан meagar 17 July 2012 в 17:27
поделиться

4 ответа

Вообще говоря, плагины jQuery являются пространствами имен на объеме jQuery. Вы могли осуществить простую проверку, чтобы видеть, существует ли пространство имен:

 if(jQuery().pluginName) {
     //run plugin dependent code
 }

dateJs однако не является плагином jQuery. Это изменяет/расширяет объект даты JavaScript и не добавляется как пространство имен jQuery. Вы могли проверить, существует ли метод, в котором Вы нуждаетесь, например:

 if(Date.today) {
      //Use the dateJS today() method
 }

, Но Вы могли бы столкнуться с проблемами, где API перекрывает собственный API Даты.

352
ответ дан Eran Galperin 23 November 2019 в 04:14
поделиться

Я настоятельно рекомендовал бы, чтобы Вы связали библиотеку DateJS своим плагином и зарегистрировали то, что Вы сделали его. Ничто не более печально, чем необходимость выследить зависимости.

Однако по легальным причинам, Вы не можете всегда быть в состоянии связать все. Также никогда не повреждает быть осторожным и проверить на существование плагина с помощью ответ Eran Galperin .

1
ответ дан Community 23 November 2019 в 04:14
поделиться

Этот вид подхода должен работать.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
-1
ответ дан ceejayoz 23 November 2019 в 04:14
поделиться

Для обнаружения подключаемых модулей jQuery я счел более точным использовать скобки:

if(jQuery().pluginName) {
    //run plugin dependent code
}
11
ответ дан 23 November 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: