2014/12/22 18:06:31 [error] 146#0: *38 directory index of "/opt/local/share/nginx/html/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:8080"
127.0.0.1 - - [22/Dec/2014:18:06:31 +0300] "GET / HTTP/1.1" 403 570 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
sudo chmod -R 755 /opt/local/share/nginx/html/
server {
# Порт
listen 80;
# Имя сервера
server_name host.com;
# Путь до статики
root /var/www/;
# Все файлы, которые будут совпадать по маске со сл. рег. выр., будут
# обслуживаться nginx: сначало будет запрос как к файлу (например, host.com/js/main.js),
# если файла не будет, то запрос будет переформирован как к директории (host.com/js/main.js/),
# и если по прежнему ничего не найдено, вернется 404 ошибка
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|3gp|mp4)$ {
try_files $uri $uri/ =404;
}
# Все остальные запросы, котоыре не подходят по маске статических файлов, описанных выше,
# будут перенаправлены на localhost.
# Первая строчка - адрес перенаправления, вторая - устанавливает заголовок Host. Если вы используете
# выделенный сервер и он используется только под один проект - её можно опустить.
location / {
proxy_pass http://localhost:1001;
proxy_set_header Host $host;
}
}
js-form
для всех форм, использующих этот сценарий, а так же js-phone
для всех полей для ввода телефона.$(document).ready(function() {
"use strict";
var form = $(".js-form");
form.on("submit", function(e) {
var submit = form.find(".js-submit");
// Если Вам приходится генерировать HTML
// или модифицировать какие-либо текстовые значения,
// всегда лучше вынести их в константы
var SEND = "Отправить заявку";
var SENDING = "Идет отправка...";
var SENDING_COMPLETE = "Заявка отправлена";
function validatePhone() {
var phone = form.find(".js-phone");
try {
if (phone.val().length === 0) {
throw Error("Phone number can't be empty");
}
} catch (e) {
phone.css({
"border-color": "#ff4500"
});
setTimeout(function() {
// Возвращаем значение цвета обводки в
// предыдущее состояние
phone.css({
"border-color": "auto"
});
}, 500);
return false;
}
return true;
}
if (validatePhone() === true) {
var request = $.ajax({
url: "send.php",
method: "POST",
beforeSend: function() {
submit.attr({
"disabled": true,
"value": SENDING
});
}
});
request.done(function(response) {
response = $.trim(response);
if (response === "sent") {
submit.attr({
"value": SENDING_COMPLETE
// Возможно, здесь стоит убрать флаг disabled?
});
} else {
// По идее, если что-то идет не так, Ваш скрипт должен
// выкидывать исключение, которое вы бы обрабатывали в
// методе fail. Но пока вы этого не сделали, придется писать через
// if-else
submit.attr({
"disabled": false,
"value": SEND
});
}
});
request.fail(function(error) {
// Когда PHP скрипт будет выкидывать ошибку, вы будете обрабатывать её здесь.
console.error(error);
});
}
// Предотвращаем стандартную обработку форму
e.preventDefault();
});
});
beforeEach(function() {
this.addMatchers({
toBeInstanceOf: function(expectedInstance) {
var actual = this.actual;
var notText = this.isNot ? " not" : "";
this.message = function() {
return "Expected " + actual.constructor.name + notText + " is instance of " + expectedInstance.name;
};
return actual instanceof expectedInstance;
}
});
});
render: function(collection) {
var ul = document.createElement("ul"),
fragment = document.createDocumentFragment();
collection.each(function(item) {
// Здесь формируете элемент списка (element)
fragment.appendChild(element);
});
return ul.appendChild(fragment);
}