我有一个PHP fileName
变量,我试图使用Ajax传递给另一个test.php
文件。让我们说test
文件简单地回应传递给它的PHP变量。这是给我带来问题的代码:
like.php:
$(".samp").on("click", ".like", function(){
$.ajax({
type: "POST",
url: "test.php",
data: {favorite : '.$fileName.'},
success: function(data) {
$("p.disp").text(data);
$("#liker").attr("class","unlike");
$("#icon").attr("class","fa fa-heart fa-lg");
}
});
});
test.php:
<?php
if(isset($_POST['favorite']))
{
$fileName = $_POST['favorite'];
echo $fileName;
}
?>
在我的PHP程序中,我发现gettype($fileName)
是字符串并将其回显为&#39; 01923&#39;在我的Ajax调用之前。但是在Ajax调用之后,test.php
中的echo语句显示的字符串是&#39; 1923&#39;。为什么我会失去领先的0?我也检查了gettype($_POST['favorite'])
中的test.php
字符串。但不知何故,当它被传递给test.php
时,它会失去0。为什么会发生这种情况?如何防止它?
P.S-我想保持字符串不变。我不想在test.php
中附加0,因为我不知道每个fileName
的前导零数。
答案 0 :(得分:3)
使用php,最好在输出html,javascript和css等时关闭php标签并打开一个新标签。
这样做:
<?php
$somephpcode = do_things();
?>
<p> Now we output html </p>
<script>
// Now we output javascript
// and do some ajax with interpolation like:
// data: {favorite : "<?php echo $fileName;?>"}
</script>
而不是这样:
<?php
$somephpcode = do_things();
echo '<p> Now we output html </p>
<script>
// Now we output javascript
// and do some ajax with interpolation like:
// data: {favorite : '.$fileName.'}
</script>';
?>
对于后一种情况,你必须在输出的字符串周围包装另一个引号,这可能会造成混淆。
答案 1 :(得分:1)
使用PHP生成HTML(以及在本例中为JavaScript)时,请始终查看渲染结果。
在这里,您应该看到最终:
// ...
data: {favorite: 01923},
// ...
我希望你能清楚地看到,这是数字,因此会被修剪为1923
。
如果要将PHP中的值注入JavaScript,则应使用json_encode
。具体地说...
data: {favorite: '.json_encode($fileName).'}
这也将处理之前可能是注入漏洞的任何事情,为您提供可由JavaScript可靠读取的值。这适用于字符串,数字,布尔值,甚至数组和对象(有一些小问题)
答案 2 :(得分:1)
更改行:
data: {favorite : '.$fileName.'},
用这个:
data: {favorite : "'.$fileName.'"},
请注意文件名前后的双引号。
问题是如果没有引号,代码会生成:
data: {favorite : 01923},
被解释为整数,因此0
丢失。
使用引号时,输出为:
data: {favorite : "01923"},
被视为字符串,0
不会丢失。