【问题标题】:AJAX Data Variables not being read by php filephp文件未读取AJAX数据变量
【发布时间】:2019-04-10 07:57:20
【问题描述】:

我遇到了一个我无法弄清楚的问题。我创建了一个简单的按钮,它使用 AJAX 将数据发送到 php 文件。我已经定义了变量,并且在单击按钮时在控制台中显示正确,但是我的 PHP 文件没有读取我正在设置的变量。我的 php 文件中的 else 语句正在触发。

有谁知道为什么没有在 php 文件中设置变量?

HTML

<button class="catalogDownload downloadButton" name="Profile Catalog" id="profileCatalogPDFButton" data-catalog-now="Profile Popular Button" data-catalog-view-name="Profile Catalog">Download Now</button>

AJAX

//Download Now AJAX
var catalog_name = '';
var button_triggered = '';
$('.downloadButton').on('click', function (event) {
    catalog_name = $(this).attr('name');
    button_triggered = $(this).data('catalog-now');
    console.log(catalog_name);
    $.ajax({
        url: 'urlhere.php',
        type: 'POST',
        data: {
            'catalog_name': catalog_name,
            'button_triggered': button_triggered
        },
        success: function (data) {
            //console.log(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert(textStatus + "|" + errorThrown);
        },
        cache: false
    });
});

PHP 文件

ini_set('display_errors', 1);
error_reporting(E_ALL);

//$catalog_name = $_POST['catalog_name'];
if(isset($_POST['catalog_name'])){ 
    $catalog_name = $_POST['catalog_name'];
} else {
    echo 'Catalog Name is not reading';
}

【问题讨论】:

  • 浏览器网络控制台中有什么?请求是否从浏览器发送到服务器?
  • @Paul 它来自 contentType: false
  • 我会将其作为答案发布,以便您接受并关闭问题好吗?
  • @Paul 供将来参考:this question 提供了详细说明如何帮助在 Chrome 中调试请求的答案。其他浏览器也内置了类似的调试工具。
  • 顺便说一句,您可以阅读此内容,但使用来自echo file_get_contents('php://input') 的原始阅读,您可以尝试用于教育目的,这也是您应该阅读 json 的方式:)

标签: php ajax pdo


【解决方案1】:

从你的代码中删除不必要的东西,尤其是contentType: false

那些应该被删除

cache: false, contentType: false, processData: false

当您将 contentType 设置为 false 时,将不会设置标头 Content-Type,PHP 将无法读取变量并将其放入 $_POST 数组中

来自手册:

$_POST - 使用 application/x-www-form-urlencodedmultipart/form-data 时通过 HTTP POST 方法传递给当前脚本的变量关联数组强>

如果你想在不设置 Content-Type 的情况下阅读它,那么你需要阅读原始请求

$postRequestContent = file_get_contents('php://input');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2015-09-30
    相关资源
    最近更新 更多