【问题标题】:JQuery Post Not Passing Data Values to Php FileJQuery Post 未将数据值传递给 PHP 文件
【发布时间】:2012-10-24 14:32:14
【问题描述】:

我正在使用 jQuery 函数 $.post 将一些值传递给 php 文件,然后该文件使用这些值来引用 mySQL 数据库并在 post success 函数中解析出结果值。但是由于某种原因,当我尝试使用 $_POST 标记获取 php 文件中的数据时,我收到未定义索引的通知。这是我的js代码:

var curX = 2;
var curY = 6;

function move(moveX, moveY) {
var position = {
    x: curX + moveX,
    y: curY + moveY
}
$.post('php/tilecheck.php', position, function(data) {
    //console.log(data);
    curX += moveX;
    curY += moveY;

    var n = data.split("\"");
    boundary(n[3], n[1]);
    boundary(n[7], n[5]);
    boundary(n[11], n[9]);
    boundary(n[15], n[13]);
    /*boundary(data.left,'left');
    boundary(data.right, 'right');
    boundary(data.top, 'top');
    boundary(data.bottom, 'bottom');*/
})
}

function boundary(value, pos) {
if(value == 1){
    $("#a" + pos).css('display', 'none');
}
else {
    $("#a" + pos).css('display', '');
}
}

以及它所指的php文件:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

include('db-info.php');

$x = $_POST['x'];
$y = $_POST['y'];

if(!empty($_POST)) {
    $q = "SELECT * FROM tiles WHERE xpos = ".($x - 1)." AND ypos = $y LIMIT 1";
    $lefttile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT * FROM tiles WHERE xpos = ".($x + 1)." AND ypos = $y LIMIT 1";
    $righttile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT * FROM tiles WHERE xpos = $x AND ypos = ".($y - 1)." LIMIT 1";
    $toptile = mysql_fetch_assoc(mysql_query($q));

    $q = "SELECT * FROM tiles WHERE xpos = $x AND ypos = ".($y + 1)." LIMIT 1";
    $bottomtile = mysql_fetch_assoc(mysql_query($q));

    $json = array(
        "left" => $lefttile['bound'], "right" => $righttile['bound'],
        "top" => $toptile['bound'], "bottom" => $bottomtile['bound']
    );

    $output = json_encode($json);
    echo $output;
}
else
    echo "No value";
?>

奇怪的是,即使 php 中的值未定义,它仍然会在数组中输出正确的数据,这由控制台日志确认。但是,要访问数组中的这些值,我必须使用对函数边界()的固定调用,而注释掉的代码不起作用。如果您有任何想法或问题,请告诉我。谢谢。

【问题讨论】:

  • 使用这个会得到什么——console.log(data);你确定这个 url > 'php/tilecheck.php' 是正确的吗?在你的 PHP 代码的第一行做一个测试 ECHO 以知道它的工作..
  • 就像我说的,控制台日志输出正确的数组 ({"left":"1","right":"1","top":"0","bottom":" 1"}),但我无法在我应用的修复程序之外引用它。我已经使用 echo 检查了 php,它确实在工作。
  • 在开发者工具中检查您的网络标签.. 或 firebug.. 看看您是否正确发送了参数
  • 我不明白。是 PHP 还是 JavaScript 中的错误?顺便说一句,在 $.post() 中你必须添加 'json' 作为最后一个参数来告诉 jQuery 你期待 JSON。 ;)
  • @wirey 每当我调用通过 $.post 传递值的函数时,网络选项卡都会显示:名称:tilecheck.php,方法:POST,状态:200/OK,类型:文本/ html。它似乎正确地传递了它。

标签: php jquery post


【解决方案1】:

我试试.. 你有 JSON 响应.. 所以你可以使用它。

!!需要在循环之前添加一项检查,以查看响应者是否成功,这是我的想法..

  $.ajax({
    url: 'php/tilecheck.php', 
    data: position, 
    type: 'POST',
    dataType: 'json',
    success: function(data) {

            $.each(data, function(key,value){
                if(value == 1){
                    $("#a" + key).css('display', 'none');
                }
                else {
                    $("#a" + key).css('display', '');
                }
            });
    }   
    });

【讨论】:

  • 试过了,没用 :(。结果和我尝试原始代码时的结果相似,所以我认为 php 文件接收或传递值的方式可能存在问题。谢谢不过为了你的答案!
  • 用 .ajax 代替 .post 试试
  • 哇哦,这行得通!谢谢你!并不是我太在意,只是好奇,但是 php 仍然抛出未定义 $_POST 索引的通知。你知道为什么吗?如果您不介意的话,您知道为什么 .ajax 有效,而 .post 无效吗?
【解决方案2】:

在 PHP 中检查你从 jQuery 中得到了什么:

print_r($_POST);

并检查“x”和“y”的正确命名

【讨论】:

  • printf(); 不支持数组,$_printf(); 相当无效。您可能指的是print_r();,最好在&lt;pre&gt; 元素中使用
  • 这是一个错字,对不起。我的意思是 print_r() 来检查帖子值。你可以看到从 jquery 实际发布的内容。
猜你喜欢
  • 2013-05-02
  • 2018-07-25
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
相关资源
最近更新 更多