参数列表ERROR ON JS后未捕获到的SyntaxError:缺少)

时间:2019-05-13 13:19:40

标签: javascript

我正在建立一个有按钮的桌子。当用户单击此按钮时,行的状态发生变化,在表中该字段代表具有0或1的字段。很好,我做了按钮,但在某些行中遇到错误,错误是参数后出现Uncaught SyntaxError:missing)列表,我非常困惑,因为代码在80%的时间内都可以正常工作。

问题不在于数据库,因为我已经在搜索某些有问题的字段。

function enviaAssociado(CTITULAR) {
    if (CTITULAR) {
        $("#CTITULAR").remove();
        $.ajax({
            url: 'php_action/enviaAssociado.php',
            type: 'post',
            data: {
                CTITULAR: CTITULAR
            },
            success: function() {
                manageTable.ajax.reload();
                //$("#CTITULAR").val(response.CTITULAR);
            }
        });
    }
    manageTable.ajax.reload();
}

PHP

`

$CTITULAR = $_POST['CTITULAR'];


$sql = "UPDATE importsmiles4e.tb_conv
SET    STAT = CASE
     WHEN  STAT = 1 THEN 0
     WHEN  STAT = 0 THEN 1
     ELSE STAT
   END
WHERE  substring(CTITULAR,2,6) = '$CTITULAR'
";
$query = $connect->query($sql);

$CTITULAR = $_POST['CTITULAR'];


$sql = "UPDATE importsmiles4e.tb_conv3
SET    STAT = CASE
     WHEN  STAT = 1 THEN 0
     WHEN  STAT = 0 THEN 1
     ELSE STAT
   END
WHERE  substring(CTITULAR,2,6) = '$CTITULAR'";
$query = $connect->query($sql);


// close the database connection
$connect->close();

echo json_encode($sql);

`

while ($row = $query->fetch_assoc()) {

$active = '';

if($row['EMAIL'] != '') {
        $active = '<label class="label label-success">Cadastrado</label>';
    } else {
        $active = '<label class="label label-danger">Cadastrar</label>'; 
    }


$botao = '<a type="button" class="btn btn-default" onclick="enviaAssociado('.$row['CTITULAR'].') ">Alterar</a>';

$status = '';

if($row['STAT'] == '0'){
    $status ='<label class="label label-warning">Não</label>';  
}else{
    $status ='<label class="label label-success">Sim</label>';
}

$output['data'][] = array(
    $row['NOME'],
    $row['CPF'],
    $row['CEPRES'],
    $row['NROPROPOSTA'],
    $row['DTADMISSAO'],
    $row['DEPENDENTES'],
    $row['VLSMENS'],
    $status,
    $botao,
);

https://i.stack.imgur.com/KnD7w.png =>错误日志

https://i.stack.imgur.com/MhsDh.png =>错误返回

成功相同时返回的唯一值就是值键,我已经检查了值是否损坏。

1 个答案:

答案 0 :(得分:5)

问题被隐藏在您的其中一张屏幕截图中:

enviaAssociado(0516542.00)

前导0与其中没有89数字(是的,really)相结合的事实使得legacy octal integer literal宽松模式。由于它是整数文字,因此不能有小数点,因此自.起,这是语法错误。

如果这是一个数字,请让您的PHP代码删除该数字中的所有前导0。如果要使用字符串,则将您的PHP代码用引号引起来。

如果您从PHP将数据输出到JavaScript代码,通常最好通过json_encode这样做。如果要在属性中执行此操作(这不是最佳做法),则还需要htmlspecialchars。所以:

$botao = '<a type="button" class="btn btn-default" onclick="enviaAssociado('.htmlspecialchars(json_encode($row['CTITULAR'])).') ">Alterar</a>';

有时,数字将包含89,因此它将起作用(这就是为什么您在此答案中删除了评论的示例0655178.00起作用的原因)。可以在宽松模式下使用,例如:

enviaAssociado(0655178.00)

请注意8。 (9会做同样的事情。)之所以起作用,是因为8位于.之前的数字部分,因此JavaScript解析器知道它不是旧的八进制数整数文字,而不是non-octal decimal integer literal(这是decimal integer literal的一种特殊类型,decimal literal),这意味着它可以是{{3}}的第一部分,因此.不是语法错误。这是JavaScript的深深黑角之一。 (这也是使用严格模式的充分理由,严格模式不允许使用非八进制十进制整数文字。)

但是,这只是一个特殊情况,即真正的问题没有正确地从PHP输出到JavaScript代码(并且没有正确地转义HTML上下文中放置的某些内容,在这种情况下特别是属性)。因此,尽管这种传统的八进制整数文字内容是JavaScript的一个深深黑角,但这并不是真正的问题。真正的问题是,确保通过json_encode(在本例中为htmlspecialchars)从PHP输出到JavaScript时,正确编码内容。