将PHP代码更改为JS

时间:2016-02-04 11:48:15

标签: javascript php

你好我在PHP中有一个代码,它捕获了在其他页面中插入的一些值,并添加了所有值,在下一页中它显示了" total"我想知道是否可以在JavaScript中使用此代码的相同功能。

  //photo file 
  NSData *data = [[NSFileManager defaultManager] contentsAtPath:filePath];

  NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
[_params setObject:uploadInfo.key forKey:@"key"];
[_params setObject:uploadInfo.aaki forKey:@"AWSAccessKeyId"];
[_params setObject:uploadInfo.acl forKey:@"acl"];
[_params setObject:uploadInfo.policy forKey:@"policy"];
[_params setObject:uploadInfo.signature forKey:@"signature"];
[_params setObject:uploadInfo.success_action_status forKey:@"success_action_status"];
[_params setObject:@"image/jpeg" forKey:@"Content-Type"];

NSURL* requestURL = [NSURL URLWithString:uploadInfo.path];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];

NSMutableData *body = [NSMutableData data];
 for (NSString *param in _params) {
 [body appendData:[[NSString stringWithFormat:@"%@", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
  }

 if (data) {
   [body appendData:data];
 }

[request setHTTPBody:body];

    [request setURL:requestURL];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSString *responseString = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);

1 个答案:

答案 0 :(得分:1)

我赞同上面的评论。我相信StackOverflow是代码编写服务,除非最近发生了一些变化。

但是,让我们看一下您发布的代码。

我认为在使用Javascript尝试此代码之前,将有助于将此代码重构为更合乎逻辑的意义。这应该可以更容易转置。每次重复使用相似的代码(例如$ak1 = $_POST['ak1']; $ak2 = $_POST['ak2']; ...)时,我认为必须有一种更有效的方法来让您的编程语言付出艰苦的努力。毕竟,计算机擅长重复性任务。

我假设你已经单独标记了表单中的所有输入字段,但实际上你可以将它们作为数组传递给$_POST,如果你给它们所有相同的名字并附加方括号如下:

<input type="text" name="ak[]">
<input type="text" name="ak[]">
<input type="text" name="ak[]">
<input type="text" name="ak[]">
<input type="text" name="ak[]">
<input type="text" name="ak[]">
<input type="text" name="ak[]">

<input type="text" name="akcs[]">
<input type="text" name="akcs[]">
<input type="text" name="akcs[]">
<input type="text" name="akcs[]">
<input type="text" name="akcs[]">
<input type="text" name="akcs[]">
<input type="text" name="akcs[]">

我不知道为什么输入字段有两组不同的名称 - 除非你有充分的理由,否则将它们合并为一个可能会有所帮助。

现在您的HTML格式更易于维护,您可以认真减少PHP中所需的变量赋值量:

if(isset($_POST['ak'], $_POST['akcs'])){
  extract($_POST);
  $all_fields = array_merge($ak, $akcs);
  $total = array_sum($all_fields);
  if($total){
    echo "<p><i>Sent at:</i>" . date('H:i, jS F');
    $ak_values   = [140, 285, 160, 120, 180, 210, 250, 120, 300, 200, 110, 110, 130, 200];
    $value = array_sum(array_map(function($a, $b){
      return $a * $b;
  }, $all_fields, $ak_values));
    echo '<br><br><br><strong>Total: </strong>'.$total;
    echo '<hr width="20%">';
    echo '<strong>Total to pay: </strong><font face color="green">'.$value.'</font><strong> $</strong>';
  } else {
  echo '<br><br><strong>You did not make any order</strong>';
  }
}

利用PHP的功能,例如extractarray_sumarray_maparray_merge(这是将两组输入字段组合在一起所必需的)你的表格 - 看?你知道只有一种类型是有意义的;))如果你想在以后修改表格,它会使重复性降低,而且更易于维护。

那么这如何转换为JavaScript?

我很高兴你问。

var ak_values   = [140, 285, 160, 120, 180, 210, 250, 120, 300, 200, 110, 110, 130, 200];
var order_date = document.getElementById('order_date');
var message = document.getElementById('message');
function sum(a,b){ return a+b }
document.getElementById('sum').addEventListener('click', function(){
  var ak = [];
  Array.prototype.slice.call(document.querySelectorAll('[name="ak[]"], [name="akcs[]"]')).forEach(function(i){
    ak.push( i.value === "" ? 0 : parseInt(i.value));
});
  var total = ak.reduce(sum);
  if (total){
    order_date.innerHTML =  "<i>Sent at:</i>" + new Date();
    ak = ak.map(function(item, index){
      return item * ak_values[index];
    });
    var value = ak.reduce(function(sum, item){
      return sum + item;
    });
    message.innerHTML = '<br><br><br><strong>Total: </strong>' + total + '<hr width="20%"><strong>Total to pay: </strong><font face color="green">' + value  + '</font><strong> $</strong>';
  } else{
    message.innerHTML = '<br><br><strong>You did not make any order</strong>';
  }
});

Javascript具有类似于mapreduce的函数来获取数组总和等等,您可以看到如何使用PHP中的方法来使用这些标准函数,这样可以更轻松地翻译成另一种语言。

需要考虑的一些事项:

  • 您是否希望在浏览器中进行这些类型的计算?价格可能会存储在需要检索的数据库中
  • 用户可以在Javascript中操作值(如存储在var ak_values数组中的值)
  • 使用AJAX可能会更好吗?
  • 内联样式?

这是一个(稍微丑陋)但正在工作的JSFiddle https://jsfiddle.net/codebubb/3tht5y8v/1/

我希望你发现这篇文章很有用。