Перейти к содержимому

Как связать js и c

  • автор:

Как связать условие Javascript c PHP

Есть база в ней находятся url. Мне надо проверить урл на ошибку, если она есть то удалить из БД. В JavaScript не селен, как связать JavaScript и PHP? Или как можно написать цикл и запросы на удаление из БД в JS

 query("SELECT * FROM `table 1`"); while ($pos_result=$pos->fetch_assoc()): < $url = $pos_result['url']; $name = $pos_result['name']; ?>  endwhile; ?> 

Отслеживать

задан 20 мар 2020 в 9:39

Dima Buljgo Dima Buljgo

1 3 3 бронзовых знака

Где этот код должен выполняться? На сервере?

20 мар 2020 в 10:09

В javascript провести проверку и если ошибка есть — отправить name при помощи ajax (без перезагрузки страницы) в php. А там, если name получен — провести удаление из базы.

20 мар 2020 в 10:10

Да он должен выполняться на сервере

20 мар 2020 в 10:12

Тогда зачем js? Прекрасно справится php

20 мар 2020 в 10:13

у меня проверка на CORS, проблемы возникают при JS, а с помощью php я не найду ошибку

20 мар 2020 в 10:14

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

  • javascript
  • php
  • mysql

Как правильно соединить клиентский JS и серверный JS c базой данных?

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

Подскажите, где и что почитать и желательно по подробнее.
Я представляю алгоритм таким, с клиента уходит запрос на серверный JS, который в свою очередь коннектится к базе данных и забирает из неё данных соответствующие моему запросу, а после отдает их мне на клиент.

Поправьте, если в чем-то ошибаюсь.

  • Вопрос задан более трёх лет назад
  • 554 просмотра

JavaScript vs. C++: создание одной и той же 3D-игры на обоих языках

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Я написал один и тот же шутер от первого лица на JavaScript, а потом на C++. В этой статье опишу, как все это происходило.

Несколько лет назад, когда WebGL начал свое шествие по браузерам, у меня возникла идея — написать шутер от первого лица на JavaScript и HTML. Абсолютно безумная затея, но она сработала, и даже не очень лагала (попробуйте сами). В свободное время я понемногу модифицировал код, со временем игра обросла фичами и стала интересной.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Тем временем появился Electron (если кратко, инструмент, позволяющий соединить веб-приложение с браузером и запускать как нативное приложение). И я задумался: «Опа! Может, сделать настоящее нативное приложение из моей игры на WebGL? Засуну его в Electron, и дело в шляпе».

Я так и сделал. Получилось на удивление неплохо, настоящее приложение. Но результат работал не очень: хоть я и приложил много усилий, чтобы приложение работало именно как приложение, а не веб-сайт, но все равно недостатков была масса — большие задержки, отсутствие нормальной аппаратной поддержки, 3D, настроек полноэкранного режима, плохая блокировка курсора и еще куча всего.

Поэтому я решил переписать свою игру на C++. И правда — а почему нет-то? Наверное, и не слишком сложно будет — JavaScript-код моей игры основывался на 3D-движке CopperLicht (я его сам написал), у которого API почти как у 3D-движка IrrLicht (его тоже написал я), на котором и так основан мой игровой движок Framework CopperCube. Работы вроде не очень много — нужно только переписать игровую логику. Все остальное — окно, интерфейс, коллизии, шрифты, текстуры, звук, картинки, обработка файлов и другое — уже было написано, еще и API использовало очень похожее.

На портирование ушли недели, но в результате игра стала нативным Win32-приложением на C++. Можете скачать ее здесь.

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Сравнение

Теперь у меня есть редкая возможность сравнить ход разработки одного и того же приложения на C++ и JavaScript. Разберу по пунктам.

Производительность

Сейчас вы очень удивитесь: производительность обеих реализаций не сильно различается (прим. перев.: А вот на компьютере без дискретной видеокарты разница огромна — в браузере игра почти не играбельна, а вот в C++-версии отсутствуют даже малейшие лаги).

Даже самая ресурсоемкая часть — процедурная генерация домов и обнаружение столкновений физическим движком — не сильно лагали на JavaScript. Тормозит буквально раза в два больше, чем в C++-версии. Оптимизация выполнения JavaScript в Chrome меня очень впечатлила. К несчастью, все равно JavaScript-версия ощущается куда более медленной. Далее я объясню, почему.

Дьявол кроется в деталях

В реализации на C++ я мог контролировать любую деталь выполнения, любую мелочь. В JavaScript-версии во многих вещах я полагался на браузер — в этом и крылась проблема. На JavaScript процедурная версия едва заметно подлагивала из-за того, что некоторые вызовы WebGL имеют свойство ненадолго вешать браузер. Буквально на миллисекунды, но их очень много — поэтому игра «плыла», ощущалась очень медленной по ритму. Я написал несколько обходов для основных проблем, но с другими ничего сделать, увы, было нельзя. На C++ же контролировать можно все — и если возникают проблемы, можно придумать способ их решить.

Версия на JavaScript на моем компьютере выдавала тот же FPS, что и на C++ — около 120 кадров в секунду. Но ощущалась она очень, очень медленной. В зависимости от используемой ОС и железа компьютера браузер ведет себя сильно по-разному, и даже ввод иногда лагает.

Даже если сцена отрисуется очень быстро — управление мышкой сильно отставало, для шутера от первого лица такое отставание критично. Из-за этого игра тоже казалось очень заторможенной.

В игровом коде есть два способа исполнения «игрового цикла»: requestAnimationFrame() и setInterval() . Одна из версий частично решает проблему скорости ввода на одних системах, другая — на других. От этого ситуация запутывается еще сильнее.

Таких мелких проблем было много, но у всех была одна причина — в JavaScript-версии все очень сильно зависит от реализации браузера, который часто делает не то, что вы от него хотите. В C++ такой проблемы не было в принципе.

Скорость разработки

И JavaScript, и C++ я знаю достаточно хорошо, поэтому скорость была примерно одинаковой. В C++ иногда возникает нужда реализовать вещи, о которых в JavaScript думать не надо, но зато система типов C++ помогает в отлове багов и опечаток. «Хвала» современным браузерам — JavaScript отлаживать так же удобно, как C++ двадцать лет назад.

Лично я думаю, у обоих языков есть и плюсы, и минусы. В конце концов, оба они — просто инструменты для достижения цели.

Итог

Если вы решите вдруг написать свой трехмерный шутер от первого лица, я настоятельно рекомендую делать это не на JavaScript/HTML/WebGL. Для встроенных в сайты мелких игрушек или прототипов они хороши, но сделать на них полноценный, да еще и нативный продукт нереально. Ну, по крайней мере, сейчас. Кто знает, вдруг через несколько лет все станет резко наоборот. Знаю много людей, которые с таким инструментарием делают двухмерные игры, и получается прекрасно. Но для трехмерной игры от первого лица это так не работает.

Я решил продолжить работу над C++-версией. Надеюсь, что закончу в ближайшие месяцы. Вот тут можно понаблюдать за прогрессом: сайт игры.

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

Выполнение javascript в программе на C#

На днях просматривал популярные библиотеки на codeplex и увидел там пару библиотек для работы с javascript. Сразу вспомнился случай, когда мне нужно было написать небольшую программку для взаимодействия с личным кабинетом на одном сайте. Поэтому без раздумий решил попробовать, как бы они справились с той задачей.

Под катом я расскажу о нерядовом взаимодействии с сайтом, каким образом я решил задачу на тот момент и смогли ли обе библиотеки справиться с той же задачей. Сразу скажу, что речь пойдёт о следующих библиотеках: jint и javascriptdotnet.

Ссылку на сайт, а также примеры javascript функций, которые я использовал, при тестировании я давать не буду, чтобы читатели не ставили эксперименты над данным ресурсом, речь будет вестись в общих чертах.

Начну с небольшой истории как начиналась разработка, я зашёл на сайт, перешёл в кабинет, после чего загрузил fiddler и начал смотреть и записывать какие параметры куда передаются, с помощью каких методов и по каким ссылкам. Довольно быстро я набросал себе алгоритм и принялся реализовывать, но столкнулся с проблемой, оказалось, что один из параметров, который я принял за случайное число не являлся таковым, чуть позже выяснилось, что вызов функции random() на самом видном месте служил лишь для отвлечения внимания, что же на самом деле там происходит помогло мне установить дополнение для Firefox под названием javascript deobfuscator, для тех, кто не знаком с данным или похожими дополнениями, то выглядит оно, таким образом, при открытии на странице google.com:

В моём случае было несколько проще, т.к. никаких фоновых скриптов не выполнялось, а чётко было видно, какие скрипты выполнялись при том или ином действии. Вот тогда я и узнал, что для получения моего «случайного» числа должно выполниться больше 200 строк кода или немногим больше 15 функций. Первым о чём я подумал, что сейчас быстренько переведу данный код на C# и на этом закончу, но проблема была в том, что знания javascript у меня поверхностные, а весь код пропущен через обфускатор и по коду видно, что там какие-то криптографические преобразования происходят, поэтому я решил, что проще будет данный код выполнить в исходном виде.

Для того, чтобы проверить, действительно ли выполняется мой код, я сразу выбрал самый простой способ — это с помощью компонента webBrowser, пример из Msdn:

* This source code was highlighted with Source Code Highlighter .

После чего достаточно вызвать следующий код:

webBrowser1.Document.InvokeScript( «test» , new String [] < "called from client code" >);

Но данный пример подходит лишь для теста, т.к. компонент webBrowser я категорически не хотел использовать в своей программе, поэтому я принялся искать другие способы решения и нашёл следующий пример:

Шаги для создания .dll:

1. Создать файл в блокноте, только с этой строкой:

class EvalClass < function Evaluate(expression: String) < return eval(expression); >>

2. Сохранить файл как C:\MyEval.js
3. Открыть VS Command Prompt (Start, Programs, VS, VS Tools)
4. Написать Cd\ чтобы оказаться в корне C:\
5. Написать

jsc /t:library C:\MyEval.js

6. После чего появиться новый файл MyEval.dll.
7. Скопировать MyEval.dll в проект и добавить ссылку на него (также нужно сослаться на Microsoft.Jscript.dll).
8. После чего можно обращаться к библиотеке таким образом:

EvalClass jScriptEvaluator = new EvalClass();
object objResult = jScriptEvaluator.Evaluate(“1==1 && 2==2”);

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

Библиотека jint

Лицензия: The MIT License (MIT)

Первым делом я решил попробовать примеры, все они заработали, но как я заметил, что на codeplex тоже есть проблемы с парсером, который «съел» в некоторых местах скобки, немного поправив примеры, все они заработали. Дальше я принялся пробовать его работу на своём наборе функций, но к сожалению так и не смог заставить библиотеку вернуть мне искомое значение, гуглил, читал обсуждения. пробовал что-то менять, но к сожалению не смог побороть String.fromCharCode():

Jint.JintException: Method isn’t defined: fromCharCode

Библиотека подключается стандартно, добавить ссылки и написать:

using Jint;

После чего достаточно такого кода, чтобы вызвать функцию:

StreamReader sr = new StreamReader( @»C:\habr_javascript\MyEval.js» );
string script = sr.ReadToEnd();

JintEngine engine = new JintEngine();
engine.Run(script);

object num = engine.Run( «Evaluate(42210607);» );
MessageBox.Show(num.ToString());

* This source code was highlighted with Source Code Highlighter .

Библиотека javascriptdotnet

Лицензия: New BSD License (BSD)

Запустив один пример, следом я сразу начал пробовать свой тестовый пример и бинго, всё заработало с первого раза.

Указываем ссылку на библиотеку, добавляем директиву using:

using Noesis.Javascript;

И пишем код, который практически идентичен предыдущему:

StreamReader sr = new StreamReader( @»C:\habr_javascript\MyEval.js» );
string script = sr.ReadToEnd();

JavascriptContext context = new JavascriptContext();
context.Run(script);

object num = context.Run( «Evaluate(42210607);» );
MessageBox.Show(num.ToString());

* This source code was highlighted with Source Code Highlighter .

Вывод

Не хотелось бы говорить что-то плохое в адрес jint, т.к. скорее всего я просто не разобрался и она работает не хуже javascriptdotnet. Хоть моя программа уже работает больше 6 месяцев, но мне сразу хотелось упростить возможные правки, т.к. в случае, если разработчики сайта поменяют буквально один символ, то мне придётся пересобрать библиотеку, а в случае jint и javascriptdotnet достаточно лишь отредактировать файл ресурсов. Также сложно себе представить, как можно добавлять функции во время выполнения программы. Более активно развивается библиотека jint и последний релиз был совсем недавно 14 февраля 2011 года, когда javascriptdotnet обновилась 16 сентября 2010 года. Библиотеки могут быть использованы не только для указанного в статье способа, но также и для тестирования Вашего сайта, на том же stackoverflow видел, что разработчики использовали jint для тестирования серверного javascript, собственно там же больше упоминают о jint. В общем, надеюсь, что данная статья была Вам полезна и в случае необходимости взаимодействия C# с javascript она будет Вам полезна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *