将javascript变量数据传递到同一个php文件中的php变量

时间:2015-08-22 07:13:39

标签: php ajax

我有一个需要将数据传递给php变量的javascript。我已经搜索过如何实现这个,但我不能让它正常工作。这就是我所做的:

Javascript:

$(document).ready(function() {

        $(".filter").click(function() {
            var val = $(this).attr('data-rel');
            //check value
            alert($(this).attr('data-rel'));

            $.ajax({
                type: "POST",
                url: 'signage.php',
                data: "subDir=" + val,
                success: function(data)
                {
                    alert("success!");
                }
            });
        });
    });    

然后在我的php标签上:

<?php
if(isset($_GET['subDir']))
{
    $subDir = $_GET['subDir'];
    echo($subDir);
}
else
{
    echo('fail');
}?>    

我总是得到失败的文字,所以一定有错。我刚开始使用php和jquery,我不知道出了什么问题。拜托我需要你的帮忙。顺便说一句,他们在signage.php上的同一个文件。提前谢谢!

5 个答案:

答案 0 :(得分:1)

您使用POST方法发送数据,并且正在使用GET

<?php
if(isset($_POST['subDir']))
{
    $subDir = $_POST['subDir'];
    echo($subDir);
}
else
{
    echo('fail');
}?>    

答案 1 :(得分:1)

您已在ajax中使用方法POST,因此您必须在php中更改为POST

<?php
if(isset($_POST['subDir']))
{
    $subDir = $_POST['subDir'];
    echo($subDir);
}
else
{
    echo('fail');
}?> 

答案 2 :(得分:1)

编辑您的javascript代码,将POST更改为ajax类型的GET

$(document).ready(function() {

    $(".filter").click(function() {
        var val = $(this).attr('data-rel');
        //check value
        alert($(this).attr('data-rel'));

        $.ajax({
            type: "GET",
            url: 'signage.php',
            data: "subDir=" + val,
            success: function(data)
            {
                alert("success!");
            }
        });
    });
}); 

答案 3 :(得分:1)

当您以这种方式回答POST电话时,您需要三个事项 - 从_POST读取数据,将其正确放入,然后以JSON回答。

$.ajax({
    type: "POST",
    url: 'signage.php',
    data: {
        subDir: val,
    }
    success: function(answer)
    {
        alert("server said: " + answer.data);
    }
});

或者:

$.post(
    'signage.php',
    {
        subDir: val
    },
    function(answer){
        alert("server said: " + answer.data);
    }
}

然后在回复中:

<?php
    if (array_key_exists('subDir', $_POST)) {
        $subDir = $_POST['subDir'];
        $answer = array(
            'data' => "You said, '{$subDir}'",
        );
        header("Content-Type: application/json;charset=utf-8");
        print json_encode($answer);
        exit();
    }

请注意,在响应中,您必须设置Content-Type,并且必须发送有效的JSON,这通常意味着您必须在发送JSON数据包后立即退出,以确保不发送任何其他内容。此外,响应必须尽快到来,并且之前不得包含任何其他内容(甚至不是之前的某些不可见的BOM字符)

另请注意,使用isset是有风险的,因为您无法发送一些等同于unset的值(例如布尔值false或空字符串)。如果你想检查_POST实际上是否包含一个subDir键,那么显式使用array_key_exists(出于同样的原因,在Javascript中你有时会使用hasOwnProperty)。

最后,由于您使用单个文件,您必须考虑在第一次打开文件时,_POST将为空,因此您将显示“失败”!您已经开始使用_POST修复此问题:

  • _POST表示这是一个AJAX调用
  • _GET表示这是signage.php
  • 的正常开放

所以你会做类似的事情:

<?php // NO HTML BEFORE THIS POINT. NO OUTPUT AT ALL, ACTUALLY,
      // OR $.post() WILL FAIL.

if (!empty($_POST)) {
    // AJAX call. Do whatever you want, but the script must not
    // get out of this if() alive.

    exit(); // Ensure it doesn't.
}
// Normal _GET opening of the page (i.e. we display HTML here).

一种可靠的检查方法是使用辅助功能验证请求的XHR状态,例如:

/**
 * isXHR. Answers the question, "Was I called through AJAX?".
 * @return boolean
 */
function isXHR() {
    $key = 'HTTP_X_REQUESTED_WITH';
    return array_key_exists($key, $_SERVER)
        && ('xmlhttprequest'
             == strtolower($_SERVER[$key])
           )
    ;
}

现在你有:

if (isXHR()) {
    // Now you can use both $.post() or $.get()

    exit();
}

实际上您可以将AJAX代码卸载到另一个文件中:

if (isXHR()) {
    include('signage-ajax.php');
    exit();
}

答案 4 :(得分:0)

当您使用$_GET时,您必须在网址中设置数据值,我的意思是

    $.ajax({
          type: "POST",
          url: 'signage.php?subDir=' + val,
          data: "subDir=" + val,
          success: function(data)
          {
              alert("success!");
          }
});

或将您的服务器端代码从$_GET更改为$_POST