2013-09-06 2 views
1

У меня есть javascript-файл, который обрабатывает скрипты нескольких файлов HTML.Файл JavaScript для каждого файла HTML?

Я начал сталкиваться с проблемами, поскольку все просто выписано, и ничего не вызывается в функциях (поэтому все вызовы AJAX, например, вызываются на всех страницах, хотя каждый вызов должен вызываться только на одной странице).

Каков наилучший способ улучшить или исправить это? Вот два способа, что я думал сделать это:

  1. Создать отдельный файл JS для каждого HTML файла
  2. Поместить весь код JS в функциях и вызвать каждую функцию соответственно

Я склонялся для ввода всех моих кодов в функции. Однако, когда я это сделал:

<script src="the_source"> 
    call_function 
</script> 

Это не работает. Я поставил это прямо перед тем, где был ответственный HTML. Я изначально написал это в Haml следующим образом:

%script{:src => "src"} 
    call_function 

Как я могу заставить эту функцию работать?

Или разделяет их, в результате чего каждый HTML-файл имеет другой JS-файл, считающийся лучшим решением? Проблема в том, что между ними существует много общего кода. Чтобы решить эту проблему, я могу создать другой файл с общим кодом в объектах, которые могут быть вызваны из других JS-файлов по мере необходимости.

Что такое более чистый подход/решение этой проблемы?

ответ

0

Я бы поставил ваш JS-код в несколько разных файлов, по одному на каждую страницу. Это может помочь вашему сайту работать быстрее (правда, не так), потому что браузер не работает через тонны и тонны кода, чтобы найти нужную функцию. Кроме того, (и это всего лишь личное мнение), файл JS с длинным списком коротких функций довольно уродлив и кажется менее эффективным.

И да, включите дополнительный файл с общим кодом. Постарайтесь убедиться, что в файлах ничего лишнего не повторяется! Удачи! :)

+0

Если я это сделаю, как включить общий файл в другие JS-файлы? Просто добавьте его в HTML ', а затем ссылку ** только ** соответствующие JS файлов на каждую страницу. :) –

1

Для вызова использования функции:

call_function(); 

Отредактировано:

<script src="the_source"></script> 
<script > 
    call_function(); 
</script> 

где "the_source" является путь к вашим JS файл

End редактировать

Чтобы отделить логики на каждой странице я бы просто создал некоторый объект настроек и поставил там флаг для случаев y ou хотят иметь отдельный:

//this code should be on every page you need your javascript file 
<script src="the_source"></script> 
<script> 
    var settings = { 
     mode:'doSomething1' 
    } 
    call_function(settings); 
</script> 

в вашем файле js делать что-то в зависимости от настроек.Значение режима:

function call_function(settings) 
{ 
    switch(settings.mode){ 
     case: 'doSomething1': 
      //code for case1 
      break; 
     case: 'doSomething2': 
      //code for case2 
      break; 
     default: 
      //code for default case 
      break; 
    } 
} 
+0

Это не сработало. Где я могу поместить этот тег скрипта? Где я хочу, чтобы он был вызван или в конце файла? – darksky

+0

Я отредактировал свой ответ. Поместите тег сценария в конец файла перед закрытием тег –

1

Это зависит от вашего плана хостинга:

, если он был Выделенный или Semi-Выделенный сервер:

я предпочел бы иметь общий файла JavaScript (для исполнения).

Если это какой-либо другой вид, тогда отдельный файл выполняется быстрее, поскольку он распределяет нагрузки запросов в разных JS-файлах.

, если вы не хотите создавать seoerated файлы, как это будет неаккуратно я предлагаю сделать следующее:

<script src="somewhere"> 
var page = "<?PHP echo basename($_SERVER['PHP_SELF']); ?>"; 
Run_Function(); 
</script> 

В Somwhere:

function Run_function(){ 
switch(page){ 
case "1.php": 
//Do Something 
break; 
case "2.php": 
//Do Something else 
break; 
default: 
alert("Unregistered webpage"); 
break; 
} 

Good Luck: D
EDIT :

Попробуйте эту функцию, чтобы получить имя файла по адресу:

function FileName(){ 
var url = window.location.pathname; 
var filename = url.substring(url.lastIndexOf('/')+1); 
return filename: 
} 

UPDATE:
Пожалуйста Проверьте улучшенную функцию выше:

function FileName(){ 
var url = window.location.pathname; 
var filename = url.substring(url.lastIndexOf('/')+1); 
if(filename == "" || filename == "Undefined"){ 
filename = "index.ruby";//or any other extension 
}else{ 
var filename = filename.replace(/%C3%84/g, "Ä"); 
var filename = filename2.replace(/%C3%96/g, "Ö"); 
var filename = filename2.replace(/%C3%9C/g, "Ü"); 
var filename = filename2.replace(/%C3%A4/g, "ä"); 
var filename = filename2.replace(/%C3%B6/g, "ö"); 
var filename = filename2.replace(/%C3%BC/g, "ü");  
} 
return filename: 
} 

Эта функция может помочь большему количеству людей + она является более гибкой в ​​использовании.

+0

Он работает на экземпляре EC2 в VPC. Это приложение jQuery/HTML, которое говорит с коннектором Rails. Если это общий файл, как я могу вызвать определенные функции внутри этого файла? Что касается вашего фрагмента, что это за 'var page'? Обратите внимание, что я не использую PHP и не воздерживаюсь от его установки на сервере. :) – darksky

+0

@Darksky Я отредактировал мой вопрос hope it help –

Смежные вопросы