通过JS / Jquery调用执行c ++可执行文件

时间:2016-11-21 04:40:42

标签: javascript jquery c++

我开发了c ++程序,我在终端

上执行这种方式
./dtapi get_probability dc simulated_diabetes_incidence_data_new.txt  AGE 70 weight 34 height 5.5 sex 0 ds1 34

结果看起来像

{"risk_of_disease":"2.122e-314"}

现在我想从前端获取输入参数,将其发送到可执行文件。

使用Javascript Jquery执行此操作的可能方法是什么,以便可以直接接收响应。 ?

修改

我将从浏览器中获取用户输入,当使用按钮时,我将使用js / jquery读取输入参数并将其发送到后端c ++可执行文件

1 个答案:

答案 0 :(得分:1)

实际上非常简单。假设我们有一个用C ++编写的加法器程序,它添加了作为参数传递的数字,如下所示:

./adder 2 3 6
{"risk_of_disease":"11"}

如果我们使用像PHP这样的服务器端语言,那么我们可以使用这样一个简单的表单:

<form method="post">
    <input type="text" name="num1" value="<?php echo $num1; ?>">
    <input type="text" name="num2" value="<?php echo $num2; ?>">
    <input type="text" name="num3" value="<?php echo $num3; ?>">
    <button>Submit and run executable adder</button>
</form>

这样的PHP代码:

if(isset($_POST['num1']) &&
   isset($_POST['num2']) &&
   isset($_POST['num3']))
{
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $num3 = $_POST['num3'];
    $exec_cmd = "../bin/adder {$num1} {$num2} {$num3}";
    $json_result = shell_exec($exec_cmd);
} else {
    $num1 = 0;
    $num2 = 0;
    $num3 = 0;
}
  • 可执行文件的位置位于'../bin/'目录。
  • 可执行文件必须与执行该文件的PHP用户具有相同的所有权 脚本页面(例如:chown web35:client3 ./adder)。
  • PHP不应该在shell_exec中为特定池/用户提供disable_functions,否则将无法运行该程序。

一个完整的例子:

<?php 

if(isset($_POST['num1']) &&
   isset($_POST['num2']) &&
   isset($_POST['num3']))
{
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $num3 = $_POST['num3'];
    $exec_cmd = "../bin/adder {$num1} {$num2} {$num3}";
    $json_result = shell_exec($exec_cmd);
} else {
    $num1 = 0;
    $num2 = 0;
    $num3 = 0;
}

?>

<form method="post">
    <input type="text" name="num1" value="<?php echo $num1; ?>" size="5">
    <input type="text" name="num2" value="<?php echo $num2; ?>" size="5">
    <input type="text" name="num3" value="<?php echo $num3; ?>" size="5">
    <button>Submit and run adder</button>
</form>

<?php if(isset($json_result)): ?>
<h3>JSON result from executable</h3>
<pre><?php echo $json_result; ?></pre>
<?php endif; ?>

<强> RESULT

enter image description here

修改

对于jQuery ajax调用,只需使用以下代码创建一个php文件:

<强> exerun.php

if(isset($_POST['num1']) &&
   isset($_POST['num2']) &&
   isset($_POST['num3']))
{
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];
    $num3 = $_POST['num3'];
    $exec_cmd = "../bin/adder {$num1} {$num2} {$num3}";
    die(shell_exec($exec_cmd));
} else {
    die('{"risk_of_disease":"0"}');
}

然后让你的simplejQuery ajax调用谎言:

<form method="post" action="exerun.php">
    <input type="text" name="num1" value="0" size="5">
    <input type="text" name="num2" value="0" size="5">
    <input type="text" name="num3" value="0" size="5">
    <button type="submit">Submit and run adder</button>
</form>

<h3>JSON result from executable</h3>
<textarea id="result" cols="30"></textarea>


<script type="text/javascript">

jQuery(function($) {

    $('form').on('submit', function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function(response) {
                $('#result').text(response);
            }
        });
    });
});

</script>

<强>更新

如果您想在没有提交表单的情况下运行AJAX调用,那么您可以直接将参数作为对象传递,并手动分配URL,如下所示:

<button id="execall">Run AXAJ remote exec</button>

<h3>JSON result from executable</h3>
<textarea id="result" cols="30"></textarea>


<script type="text/javascript">

jQuery(function($) {
    $('#execall').on('click', function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: 'exerun.php',
            data: {
                'num1': 10,
                'num2': 20,
                'num3': 30
            },
            success: function(response) {
                $('#result').text(response);
            }
        });
    });
});

</script>