你好我在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);
答案 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的功能,例如extract,array_sum,array_map和array_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具有类似于map和reduce的函数来获取数组总和等等,您可以看到如何使用PHP中的方法来使用这些标准函数,这样可以更轻松地翻译成另一种语言。
需要考虑的一些事项:
var ak_values
数组中的值)这是一个(稍微丑陋)但正在工作的JSFiddle https://jsfiddle.net/codebubb/3tht5y8v/1/
我希望你发现这篇文章很有用。