我有一个在DB2 tech_id上进行查找的表单。 tech_id是一个26位数字。我希望通过ajax将其作为字符串传递给我的后端进程,但每次转换时都会这样:
2.015052714252E+25
打破了后端代码。
我想通过使用toString
函数来解决这个问题,但没有运气。这是jquery部分:
$('form').submit(function(event) {
var id = $('#tech_id').val().toString(); // the form input with the tech_id
$.ajax({
type: 'POST',
url: 'do_stuff',
data: {id: id}, // also tried data: {id: id.toString()} here
dataType: 'json',
encode: true
})
然后在后端我像这样传递它,再次尝试转换为字符串:
$techid = $content['id']; // from the PHP $_POST array
$host = 'my_API_endpoint';
$url = $host."/user/".$techid;
$results = file_get_contents((string) $url);
我一直收到以下错误:
file_get_contents(http:my_api_endpoint/user/2.015052714252E+25): failed to open stream: HTTP request failed! HTTP\/1.0 500 Internal Server Error
知道问题是什么?
编辑:我已将其缩小到控制器中的表单处理程序,它自动json_decodes
所有输入。它是转换字符串的json_decode
函数(在php中)。
答案 0 :(得分:0)
JavaScript没有BigInteger类型,因此它转换为指数形式。基本上为了处理这种类型的案件,人们使用这么多技术。
还有很多库可以处理这个问题。例如BigInt,BigNumber等,
但是对于你的情况,据我所知,我建议尝试将26位数字转换为十六进制并将其发送到后端。在后端再次将其从十六进制转换回整数。
我的意思是尝试使用这个
$('form').submit(function(event) {
var id = $('#tech_id').val().toString(16); // this converts to hexa
$.ajax({
type: 'POST',
url: 'do_stuff',
data: {id: id}, // this will be a String in hexa format.
dataType: 'json',
encode: true
})
答案 1 :(得分:0)
$('form').submit(function(event) {
var id = ""+$('#tech_id').val();
$.ajax({
type: 'POST',
url: 'do_stuff',
data: {id: id},
dataType: 'json',
encode: true
})
然后在查询时将其转换为数字或不需要将其转换为数字,您可以将其保持为字符串没问题
答案 2 :(得分:0)
像这样使用url_encode。
$url = $host."/user/".$techid;
$url= url_encode($url);
现在使用文件获取内容可能有帮助