【问题标题】:PHP Script Does not Receive jQuery POSTPHP 脚本不接收 jQuery POST
【发布时间】:2014-09-03 21:36:57
【问题描述】:

首先,我是一个 jQuery 菜鸟和一个 PHP 菜鸟,所以如果这是一个愚蠢的问题,我很抱歉(虽然我已经搜索过互联网,具体来说,这个网站上下无法计算找出我做错了什么)。另外,如果您发现任何其他错误/杂乱的代码等,请随时告诉我:)。

我正在尝试创建一个画廊,其中有一个上一个和一个下一个按钮。当您单击上一个时,img-tag 的 src 属性通过 jquery 更改为上一个图像,下一个按钮和下一个图像也是如此。但是,当您按下上一个按钮并且当前图像是第一张图像时,我希望它返回到最后一张图像。我需要动态地发生这种情况,因为我有几个这样的画廊,其中的图片总数不同。现在,我目前的做法是(大致):

  • 从单击的按钮向我的图像切换发送方向参数 功能(“向后”或“向前”)

  • 提取图像源的文件路径并将其发布到外部 PHP脚本,然后计算其中的文件数 目录。

  • 检查方向参数是否为正向。如是, 增加当前图像文件名末尾的数字 一个。如果不是,则减去一个(导致文件不存在 姓名)。这个新文件名被分配给 nextImage 变量。

  • 检查 nextImage 是否存在。如果是,则将其指定为 img src 属性。如果没有,从外部获取文件计数 PHP 脚本,将其实现为 nextImage 作为文件编号和 然后将其分配给 src 属性。

大部分都有效。但是,在第一张图像上单击上一张时获取最后一张图像不会。我已经进行了一些调试并将其范围缩小到它似乎停止工作的程度。 Firebug 告诉我 jQuery POST 函数有效(并且我也收到了成功警报),并且它将我想要的数据发布到 PHP 文件中。但是,在 PHP 脚本中,从未输入过 if (isset($_POST["id1"])) 分支。它总是直接转到else 分支,尽管我基本上已经从本网站上接受的答案中复制并粘贴了整个脚本。

这是 jQuery 代码:

var nextImageLength = " ";
var nextImage = " ";
var imageString = " ";
var nextImageStr = " ";
var nextImageNmb = 0;

var countImageLength = function($countimagelength) {
    nextImageLength = nextImageStr.length;
    if (nextImageLength < 3) {
        if (nextImageLength < 2) {
            nextImage = imageString + '00' + nextImageStr + '.jpg';
        }
        else {
            nextImage = imageString + '0' + nextImageStr + '.jpg';
        }
    }
    else {
        nextImage = imageString + nextImageStr + '.jpg';
    }
}

function multiPageToggle(direction) {
    var currentImage = $(".viewport_img_high").attr("src");
    imageString = currentImage.slice( 0, 35 );
    $.ajax(
            {
            type: "POST",
                url: "countImages.php",

                data: { id1: imageString},
                success: function (count) {
                    //alert('success');

            }
    });     
    var currentImageNmb = currentImage.slice(-7, -4);
    if (direction == "forward") {
        nextImageNmb = (parseInt(currentImageNmb)) + 1;
    }
    else {
        nextImageNmb = (parseInt(currentImageNmb)) - 1;
    }
    nextImageStr = nextImageNmb.toString();
    countImageLength();
    $.get(nextImage)
            .done(function() { 
                $(".viewport_img_high").attr("src", nextImage);
         }).fail(function() { 
                 if (nextImageNmb < 1) {
                $.get('countImages.php', function(count) {
                    nextImageStr = count;
                });
                countImageLength();
                $(".viewport_img_high").attr("src", nextImage);
            }
            else {
                nextImageStr = "1";
                countImageLength();
                $(".viewport_img_high").attr("src", nextImage);
            }
         });
}   

这是我的 PHP 脚本:

<?php
if (isset($_POST["id1"])) 
{
  $imgStr = $id1;
} 
else 
{
  $imgStr = "1";
  echo "Oops. Something went really wrong here.";
}
$imagePath = "c:/xampp/htdocs/portfolio/images2/" + $imgStr + "/";
$count = iterator_count(new DirectoryIterator($imagePath));
echo $count;
?>

编辑:我将在下面添加一些 Firebug 数据。也许这有助于理解这一点。 响应头:

Connection  Keep-Alive
Content-Length  77
Content-Type    text/html
Date    Tue, 15 Jul 2014 04:26:24 GMT
Keep-Alive  timeout=5, max=100
Server  Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.9
X-Powered-By    PHP/5.5.9

请求标头:

Accept  */*
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Cache-Control   no-cache
Connection  keep-alive
Content-Length  43
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    localhost
Pragma  no-cache
Referer http://localhost/portfolio/index_b.php
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
X-Requested-With    XMLHttpRequest

回复:

array(1) {
  ["id1"]=>
  string(35) "images2/des004_large_/des004_large_"
}
0

【问题讨论】:

  • 在您的 PHP 脚本中,您使用 $id1 但从未设置它。你的意思是$imgStr = $_POST["id1"];

标签: php jquery ajax image post


【解决方案1】:

行:

$imgStr = $id1;

应该是:

$imgStr = $_POST['id1'];

【讨论】:

  • 谢谢:)!我在这里看到了两个公认的答案,我都试过了,但都没有奏效,所以这不是我主要问题的解决方案。问题是它甚至从未达到这一点。它没有进入肯定的 if 分支(我尝试从那里回显消息,但我从来没有得到它们,但我总是从 else 分支得到错误消息)。不过还是谢谢,我会改的:)。
【解决方案2】:

vardump($_POST) 检查数组中的所有值。如果只有一个空数组,您的页面没有发布任何内容,否则它将输出您帖子的所有内容。然后开始解决这个问题:检查所有存在的索引并在你的代码中替换它们;)

【讨论】:

  • 我刚刚尝试阅读 vardump 并且仍然有点困惑,所以我希望我做得正确。我插入了“$a = var_dump($_POST); echo $a;”在 if 语句之前(起初用 ($_POST["id1]) 尝试过,但这只会给我一个错误),它会回显 array(0){}。
  • 不,你应该只写var_dump($_POST),你不需要将它分配给一个变量,因为它已经单独打印到输出了。
  • 啊,谢谢:)。我将得到与 array(0){} 相同的输出。所以这意味着 PHP 脚本没有从我的 jQuery 函数接收数据,对吗?
  • 是的,如果它是一个空数组,它不是 POST。另外,我强烈建议使用$.post 进行POST 或$.get 进行GET 而不是$.ajax 进行请求。
  • 我刚刚再次检查了 Firebug。它说对我的 POST 函数的响应是这样的: array(1) { ["id1"]=> string(35) "images2/des004_large_/des004_large_" } 0 所以看起来它正在向我发布它(以及它发布的数据也正是我希望它发布的数据)。它只是没有被 PHP 脚本识别/接收。我一定会检查 $.post 和 $.get 命令。谢谢:)!
【解决方案3】:

好的,所以我仍然不知道出了什么问题,但我只是重写了我的 jQuery 脚本的 POST/GET 部分,以及从头开始的 PHP 脚本,现在它可以工作了。这是我的新代码,以防将来有人再次遇到此问题并遇到类似问题。我用这个替换了 POST-$.ajax 函数(同时也更改了我的 jQuery 其余部分中的一些变量,所以不要让你感到困惑):

$.post( "test3.php", {a: imageStringSlice}, function(data) {
            //alert(data);
    count = data - 2;
});

带有这个的 $.get:

nextImageStr = count.toString();
countImageLength();
$(".viewport_img_high").attr("src", nextImage);

还有这样的 PHP 脚本:

<?php
if( $_REQUEST["a"] )
{
    $imgstr = $_REQUEST['a'];
    settype($imgstr, "string");
    $count = iterator_count(new DirectoryIterator($imgstr));
    echo $count;
}
else {
    echo "1";
}
?>

感谢 Barmar,尤其感谢 gcarvalho97 帮助我 :)!

【讨论】:

    【解决方案4】:

    我对此非常晚,但是我最近遇到了同样的问题,并且在任何地方都找不到任何帮助。

    简单的答案是,如果 PHP 无法识别表单,它不会填充 $_POST,但是输入仍然可用。

    当我通过 javascript 发布(在我的情况下为 json 数据)时,我使用以下方法从 php 中取回它:

    $postbody = file_get_contents("php://input");
    

    请注意,它不等同于帖子,因为它没有被处理,因此您可能需要在这方面做很多工作。

    有关流包装器的更多信息可在此处获得:[php 输入的 php 手册][http://php.net/manual/en/wrappers.php]

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 2012-08-02
      • 1970-01-01
      • 2016-05-08
      • 2012-04-10
      • 2017-10-06
      • 1970-01-01
      • 2011-06-13
      • 2012-08-02
      相关资源
      最近更新 更多