将大型表格编号从javascript转换为字符串

时间:2015-10-15 23:18:48

标签: javascript php jquery ajax

我有一个在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中)。

3 个答案:

答案 0 :(得分:0)

JavaScript没有BigInteger类型,因此它转换为指数形式。基本上为了处理这种类型的案件,人们使用这么多技术。

还有很多库可以处理这个问题。例如BigIntBigNumber等,

但是对于你的情况,据我所知,我建议尝试将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);

现在使用文件获取内容可能有帮助