【问题标题】:PHP Not Receiving AJAX Post Data, When AJAX is sending correctly当 AJAX 正确发送时,PHP 未接收 AJAX 发布数据
【发布时间】:2018-03-07 22:42:18
【问题描述】:

我正在使用以下 AJAX 调用 PHP 函数:

 $.ajax({
    url : 'php/jstranslator.php',
    type : 'post',
    data : {'action' : 'campaignnamecheck',
           'newcampaignname' : campaignname,
           'oldcampaignname' : oldcampaignname },
    success : function(result) {
        check = result;
        console.log("campaignnamecheck: " + check);
    },
    error : function(xhr, desc, err) {
        console.log(xhr);
        console.log("Details: " + desc + "\nError:" + err);
    }
});

接收此调用的 php 如下所示:

if ($_POST['action'] == "campaignnamecheck") {
    $newcampaignname = $_POST['newcampaignname'];
    $oldcampaignname = $_POST['oldcampaignname'];

    campaignnamecheck($newcampaignname, 
                      $oldcampaignname);

}

campaignnamecheck 函数如下所示:

function campaignnamecheck($newcampaignname, $oldcampaignname) {
    $conn = conn();
    echo "php oldcampaignname: " . $oldcampaignname;
    // Select any campaigns 
    $campaignsql = "SELECT CampaignName " .
        "FROM campaignstest " .
        "WHERE CampaignName = '" . $newcampaignname . "' ";
    if(!$campaignresult = $conn->query($campaignsql)){
        die('There was an error running the query "' . $campaignsql . '" [' . $conn->error . ']');
    }

    // If the campaign name remained the same as before it is a safe campaign name
    if ($newcampaignname == $oldcampaignname) {
    } else {
        // If the campaign name changed, or if it's a new campaign, then check to see if the name already exists in the database
        if ($campaignresult->num_rows == 0) {
            echo "true";
        } else {
            echo "false";
        }
    }
}

我在 apache 错误日志中收到的错误如下:

[Wed Mar 07 16:30:00.330318 2018] [:error] PHP Warning:  Missing argument 2 for campaignnamecheck(), called in /var/www/html/test/php/jstranslator.php on line 110 and defined in /var/www/html/test/php/campaignsfuncs.php on line 747
[Wed Mar 07 16:30:00.330779 2018] [:error] PHP Notice:  Undefined variable: oldcampaignname in /var/www/html/test/php/campaignsfuncs.php on line 749

当我在 chrome 上查看控制台的网络选项卡时,我可以看到您已设置的值:

action:campaignnamecheck
newcampaignname:test
oldcampaignname:none

我到底错过了什么?

【问题讨论】:

  • 您是否检查过发送到您页面的帖子?像这样:if ($_POST['action'] == "campaignnamecheck") { $newcampaignname = $_POST['newcampaignname']; $oldcampaignname = $_POST['oldcampaignname']; if(!empty($newcampaignname) && !empty($oldcampaignname)) campaignnamecheck($newcampaignname, $oldcampaignname); }
  • 您在上面提供的代码实际上来自第 110 行吗? “/var/www/html/test/php/jstranslator.php 在第 110 行”......有点令人困惑,因为它的设置就在被调用的正上方。
  • 我建议您在$oldcampaignname = $_POST['oldcampaignname']; 之后立即执行var_dump($oldcampaignname); 以查看它是否已设置。如果是,那么就在$conn = conn(); 之后做同样的事情。它将帮助您找出问题的根源。
  • 即使post var是空的(甚至丢失了,如果丢失了Notice: Undefined index:会报错,这是不存在的,所以post var 必须存在)... 做$oldcampaignname = $_POST['oldcampaignname']; 无论如何都会设置$oldcampaignname。所以在函数调用中使用它就在它下面应该传递了一些东西,因为它会是第二个参数。即使您将其设置为 null...它传递一个参数并且不会导致该错误。
  • 是的,没错,但我相信我们遗漏了一些代码。

标签: php jquery ajax post


【解决方案1】:

我不知道为什么这解决了我的问题。但是为了调试,我添加了一行:

if ($_POST['action'] == "campaignnamecheck") {
    $newcampaignname = $_POST['newcampaignname'];
    $oldcampaignname = $_POST['oldcampaignname'];
    var_dump($oldcampaignname);

    campaignnamecheck($newcampaignname, 
                      $oldcampaignname);

}

现在它似乎工作了。

【讨论】:

  • 这没有多大意义,尽管您是否也在不同的环境中进行了相同的测试?我的意思是,代码可能会起作用,但是很高兴找出这种行为的真正原因/原因不是吗? var_dump 输出了什么?
  • 否 这一切都在同一个环境中。它输出 string(4) none 就像它应该的那样
  • 是的,但你有没有在我的意思的不同环境中测试过它。只是为了确定这个原因来自哪里。甚至可能是内存问题。我不知道为什么会发生这种情况......
【解决方案2】:

所以我认为这是显而易见的。不知何故,您没有将第二个参数传递给campaignnamecheck()。表示您尚未收到来自$_POST 的邮件。

if ($_POST['action'] == "campaignnamecheck") {
  $newcampaignname = $_POST['newcampaignname'];
  $oldcampaignname = $_POST['oldcampaignname'];
  if(!empty($newcampaignname) && !empty($oldcampaignname)) {
     campaignnamecheck($newcampaignname, $oldcampaignname); 
  }
}

首先,当您编写代码时,您需要检查值是否适合 ifs 或 try catch 语句。

调试代码也是一项基本技能

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2019-02-17
    • 2016-10-06
    • 2015-03-02
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多