Как мне получить переменную из встроенного js-скрипта в html и поместить ее во внешний js-файл?

#javascript

#javascript

Вопрос:

Я хочу поместить переменную, полученную с помощью встроенного скрипта, в файл: index.ejs. Это код, который я получил, который:

 $(function(){ 

 var finalpoints = points;
 var finalcosts = costammount;
 finaldata = [finalpoints,finalcosts];
});
  

и код, который у меня есть во внешнем файле:

 (function( detail, $, undefined, index) {
    'use strict';
    var fd= finaldata;
})(fd, jQuery);
  

и ничего не происходит.. это ошибка:

 ReferenceError: fd is not defined
at /app/index.js:95:4
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
    at next (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
    at /rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:335:12)
    at next (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/index.js:275:10)
    at serveStatic (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/serve-static/1.14.1/node_modules/serve-static/index.js:75:16)
    at Layer.handle [as handle_request] (/rbd/pnpm-volume/9dc75d7a-5227-48ce-8d3d-268791bd5521/node_modules/.registry.npmjs.org/express/4.17.1/node_modules/express/lib/router/layer.js:95:5)
  

Ответ №1:

Вы можете попробовать использовать глобальную переменную, то есть объявить ее перед закрытием в глобальной области видимости. Это не «чистое» решение, но проще всего попробовать и посмотреть, работает ли остальной код нормально.

 var globalData = {
  finalpoints: 0,
  finalcosts: 0
};

$(function(){ 
 globalData.finalpoints = points;
 globalData.finalcosts = costammount;
});
  

и затем:

 (function( detail, $, undefined, index) {
    'use strict';
    var fd= globalData;
})(fd, jQuery);
  

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

 function getFinalData() {
  return [globalData.finalpoints, globalData.finalcosts];
}
  

или просто не переносите встроенные данные и не используйте глобальную переменную:

 function getFinalData() {
  var finalpoints = points;
  var finalcosts = costammount;
  return [finalpoints, finalcosts];
}
  

и затем:

 (function( detail, $, undefined, index) {
    'use strict';
    var fd= getFinalData();
})(fd, jQuery);
  

После этого вы можете попробовать некоторые решения для передачи сообщений, такие как пользовательские события (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events ), или какая-то глобальная библиотека хранилища данных, или даже https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage (или sessionStorage) и т. Д. … В зависимости от того, в какой области запускается внешний файл и / или как часто необходимо передавать данные.

Имейте в виду, что встроенный код должен выполняться перед кодом из внешнего файла, т. Е. встроить его перед включением других скриптов.

Комментарии:

1. эй, я перепробовал все ваши методы, и когда я его запустил, он выдал ошибку: ReferenceError: fd не определен в /app/index.js:96:4

2. можете ли вы обновить свой вопрос как с помощью html, так и внешнего js, и как вы подключаетесь к этому внешнему js? некоторые базовые настройки для отладки?