我开发了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 ++可执行文件
答案 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/'
目录。chown web35:client3 ./adder
)。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 强>
修改强>
对于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>