为什么我的php变量是用ajax保持为空?

时间:2016-05-28 22:22:47

标签: php jquery html

首先,精确度:我正在使用MAMP和Brackets,以及Chrome进行测试。

这就是我所拥有的:

<ul>
    <li class="brick" data-pseudo="one">Some text or elements</li>
    <li class="brick" data-pseudo="two">Some text or elements</li>
    <li class="brick" data-pseudo="three">Some text or elements</li>
</ul>

li.bricks只是矩形文章“链接”到Work1,Work2和Work3,并由数组中的PHP函数生成。 我试图获取被点击的.brick的“伪”数据将其放入PHP变量并使用它在另一个php函数中调用另一个数组,以生成Work1,Work2的HTML元素,... 我发现我必须使用AJAX并设法获得该代码:

var pseudo;

function sendPseudo(info){
    $.ajax({
        type: "POST",
        url: "my_php_function_page.php",
        ContentType: 'application/json',
        data: {
            'data_name': info
        },
        success: function (data) { //testing the success
            alert(data);
        },
        error: function (errorThrown) {
            alert('You are wrong !');
        }
    });
}

$('.brick').click(function(){

    //some code

    pseudo = $(this).data('pseudo');
    sendPseudo(pseudo); //calling sendPseudo() function
});

这是我测试的PHP函数:

function loadWork(){
    $workToLoad = $_POST['data_name'];
    echo '<p>'.$workToLoad.'</p>';
}

...我正在调用我的HTML文档:

<section class="site">
    <div class="left">
        <?php loadWork() ?>
    </div>

    <div class="right">
        //some other content
    </div>
</section>

所以我有两个问题。首先,当点击.brick时,警报会弹出,但它是空的,绝对没有任何内容,但是当我在console.log中使用var伪时,我看到“一个”,“两个”......其次,回声在测试PHP函数时不会生成带伪的段落。

Pleeeaaase,帮我找出我做错了什么,这让我发疯了! 谢谢!

3 个答案:

答案 0 :(得分:1)

我认为你的订单有些混乱。正如你所说,loadWork()是浏览器读取html文件时调用的html文件的一部分,它只被调用一次。如果还没有定义loadWork()(或者存在于另一个文件中,因为你的AJAX请求建议基于它调用my_php_function_page.php),那么它将不会输出任何内容。换句话说,当浏览器请求html时,loadWork()需要其post数据存在。

您可以将php放在与正在调用的html相同的文件中,但看起来您可能正在尝试将loadWork()的结果插入到已存在的div中。更改你的ajax函数,以便if(data!=“”)更改div的内部html以包含数据:

function sendPseudo(info){
    $.ajax({
        type: "POST",
        url: "my_php_function_page.php",
        ContentType: 'application/json',
        data: {
            'data_name': info
        },
        success: function (data) { //testing the success
            alert(data);
            $('.left').html(data);
        },
        error: function (errorThrown) {
            alert('You are wrong !');
        }
    });
}

答案 1 :(得分:0)

我认为您错过了在my_php_function_page.php中调用函数loadWork(),此代码可能会修复您的空警报问题。

var pseudo;

function sendPseudo(info){
    $.ajax({
        type: "POST",
        url: "my_php_function_page.php",
        ContentType: 'application/json',
        data: {
            'data_name': info
        },
        data=data.trim(); // to remove the unwanted space around the string
        success: function (data) { //testing the success
            if(data!="")
            {
              alert(data);
              $(".right").html(data); // This adds your AJAX success data to the class left inside your DIV
            }
           else
           {
           alert("You're wrong !");
           }
        },
    });
}

<强> my_php_function_page.php

function loadWork(){
    $workToLoad = $_POST['data_name'];
    echo '<p>'.$workToLoad.'</p>';
}

loadWork();

答案 2 :(得分:-1)

我不确定原因,但有时候数据功能不起作用,所以我总是在你的情况下使用attr(&#39; data-pseudo&#39;)。

所以它会是这样的:

pseudo = $(this).attr('data-pseudo');