PHP + Jquery - 通过ajax将值传递到php并与变量进行比较

4

我无法让以下 PHP + jQuery 正常工作 - 我只想通过 ajax 传递值,并让 php 捕获它,检查是否匹配并将得分加1。

这是我编写的代码:

<?php
$score = "1";

$userAnswer = $_POST['name'];

if ($_POST['name'] == "145"){
    $score++;
}else{
    //Do nothing
}

echo $score;

?>


<script type="text/javascript">

$(document).ready(function() {

    $("#raaagh").click(function(){

    var value = "145";

    alert(value);

    $.ajax({
        url: 'processing.php', //This is the current doc
        type: "POST",
        data: ({name: value}),
        success: function(){
            location.reload();
       }
    });


    });
});

</script>

<p id="raaagh">Ajax Away</p>

感谢您的帮助,我已经在两个实例中将GET更改为POST,但是还是有问题-还有其他的错误。

那么问题到底是什么呢? - Jan Hančič
没有问题描述的问题很难回答。"它不起作用" 不是一个足够好的描述。 - Ruan Mendes
5个回答

16

首先:不要回到黑暗时代......不要使用相同的脚本来生成HTML和响应ajax请求。

我无法理解你试图做什么......让我改变一下你的代码,至少让它有些意义,并记录下正在发生的事情。似乎问题是你从成功处理程序中调用了location.reload。

// ajax.php-如果name参数为145,则输出2,否则输出1(???)

<?php
$score = "1";    
$userAnswer = $_POST['name'];    
if ($_POST['name'] == "145"){
    $score++;
}       
echo $score;    
?>

// 测试.html

<script type="text/javascript">  
$(document).ready(function() {    
    $("#raaagh").click(function(){    
        $.ajax({
            url: 'ajax.php', //This is the current doc
            type: "POST",
            data: ({name: 145}),
            success: function(data){
                // Why were you reloading the page? This is probably your bug
                // location.reload();

                // Replace the content of the clicked paragraph
                // with the result from the ajax call
                $("#raaagh").html(data);
            }
        });        
    });
});

</script>

<p id="raaagh">Ajax Away</p>

你刚刚帮我解决了一个大问题 - 我仍在使用自动重新加载的功能,所以那不是错误 - 但无论其他改变是什么,都已经修复了它。谢谢! - Richard
1
无论其他方面发生了什么变化,事实是您现在不再输出页面的HTML部分以进行Ajax调用。 - Ruan Mendes

2
您在jQuery中使用了POST,但在php中却尝试获取GET。
顺便说一句,最好在读取之前检查GET/POST变量是否已设置。可以使用isset()函数来实现。

1

$_GET 替换为 $_POST 就好了。 基本上,POST 和 GET 是通过两种不同的方式向脚本传递变量。PHP 中的 get 方法也可以附加在 URL 的末尾:script.php?variable=value ,这种方法很容易被黑客攻击。而 post 方法可以通过表单或者 ajax 调用进行提交,它相对来说更加安全,至少比 get 更加安全。 同时,我建议在调用 GET 或 POST 变量之前先检查它们是否已设置,这样可以避免无用的错误提示。

只需使用以下代码即可:

if (isset($_POST['var']) and !empty($_POST['var'])) { // do something } 

您也可以删除

}else{
// do nothing
}

脚本的一部分,因为else子句并不总是必要的。


isset($_POST['var']) and !empty($_POST['var']) 是一种反模式,不应该出现在任何人的代码中,无论出于什么原因。https://dev59.com/pG455IYBdhLWcg3wD_2Z#4559976 - mickmackusa

0

您正在使用Ajax POST提交数据,但尝试从GET中读取它。请在您的Ajax调用中使用type: "GET"或在您的PHP中使用$_POST['name']


0
问题在于你使用 jQuery 来进行 POST 值的请求,但是却使用 GET 来读取它。
你可以通过将 $_GET['name'] 改成 $_POST['name'] 来解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接