4

我以前遇到过这个问题并希望再次这样做:我想在 javascript 和 PHP 中运行小计计算。我可能想在某个时候更改计算。

  • 它需要在 javascript 中运行以最大限度地提高计算速度,以便用户知道会发生什么。
  • 它需要在 PHP 中运行,这样我才能获得恶意用户无法干预的有效小计。

像这样:

  • 如果我只在客户端(在 javascript 中)运行计算,恶意用户可能会破解 javascript 并更改小计。
  • 如果我只在服务器端(在 PHP 中)运行计算,则必须等待 AJAX 调用让用户获得更新的小计。

所以我想在双方都进行计算。我看到这样做的唯一方法是在 PHP 中对计算进行编程并在单独的 javascript 中对计算进行编程。

我的问题是,人们会推荐我使用什么模式、技术或技术在服务器端创建计算并使其在发送到客户端时与 javascript 兼容?

例如,我的一个想法是一个用于计算的 PHP 数组,它被转换为 PHP 代码和 javascript 代码,例如:

array(
    array(type => "operand", "name" => "variable_A"),
    array(type => "operator", "name" => "multiply"),
    array(type => "operand", "name" => "variable_B"),
)

这可能会转换为 PHP:

return $variable_A * $variable_B;

并进入Javascript:

return variable_A * variable_B;

这是一个示例操作模式。我不知道如果它们存在真实的会是什么样子。

4

2 回答 2

0

阿贾克斯

您可以传递使用 javascript 输入的所有变量并保留基于进程服务器。

或者我误解了你的问题?

于 2013-04-08T08:57:13.440 回答
0

我对你的问题的看法就像你描述的那样:做双重计算。我相信这就是“大男孩”的做法。

示例:将两个数字相加。所以你有这样的代码:

HTML 片段:

<form method="post" action="/add.php">
<input id="firstOperand" name="firstOperand" placeholder="First operand"/>
<input id="secondOperand" name="firstOperand" placeholder="Second operand"/>
<input type="submit" onclick="doCalculation()" value="Add"/>
</form>
<div id="result" />

你的 JS 可能看起来像:

function doCalculation() {
  var first = parseInt(document.getElementById('firstOperand').value);
  var second = parseInt(document.getElementById('secondOperand').value);

  var result = first + second;
  // the minimum amount of error checking
  if isNan('result') return false;
  document.getElementById('result').innerHTML = result;

  // Now use some framework (like jQuery) to make an Ajax call and pass the result to callback.
  Framework.Ajax('/add.php?format=json', 'POST', {first: first, second: second}, callback);
  return false;
}

function callback(response) b
  var res = response.json.result;
  var resultEl = document.getElementById('result');
  var errorEl = document.getElementById('error');
  // if our result is not correct, we want to update the user on it
  if (res != parseInt(resultEl.innerHTML)) {
    Framework.removeClass(errorEl, 'hidden');
  }
  document.getElementById('result').innerHTML = res;
}

当然,您的 PHP 结果页面 (add.php) 将返回带有结果的 json。这里的附加值是您还可以返回纯 HTML 结果(例如禁用 js 时)。

您的回调还可以检查返回的结果中是否存在错误并显示该错误消息。或者,如果结果超时,则显示“结果”未保存的通知。但这超出了问题的范围,我猜(至少,超出了答案的范围)。

注意:这只是我头脑中的代码,未经测试,直接写在答案框中,可能有几件事应该做得更好。

于 2013-04-08T09:23:56.423 回答