【问题标题】:Send array with Ajax to PHP script in wordpress使用 Ajax 将数组发送到 wordpress 中的 PHP 脚本
【发布时间】:2017-08-09 07:21:36
【问题描述】:

我正在尝试将数组从 JS 文件发送到服务器中的 PHP 文件,但是当我尝试在 php 中使用该数组时,我什么也没得到。

这是我在 JS 中的函数:

var sortOrder = [];
var request = function() {

    var jsonString = JSON.stringify(sortOrder);

    $.ajax({
        type: "POST",
        url: '<?php echo get_template_directory_uri(); ?>/MYPAGE.php',
        data: { sort_order : jsonString },
        cache: false,
        success: function() {
            alert('data sent');
        }
    })  
};

这是我的 php 文件 MYPAGE.php:

<?php

$arrayJobs = json_decode(stripslashes($_POST['sort_order']));

echo($arrayJobs);?>

这是我第一次使用 ajax,老实说,我也对 url 感到困惑,因为我正在使用 wordpress 中的模板。 即使我不使用json也行不通!

这些是我正在查看的示例:

Send array with Ajax to PHP script

Passing JavaScript array to PHP through jQuery $.ajax

【问题讨论】:

标签: javascript php jquery ajax wordpress


【解决方案1】:

首先,JavaScript 代码在哪里?它需要在 .php 文件中才能执行 php 代码(wordpress 函数)。

第二,你怎么知道后端没有收到数据。您正在发送 AJAX 请求,但未在此处接收结果。如果您阅读$.ajax 上的documentation,您会看到来自服务器的响应已传递给success 回调。

$.ajax({
    type: "POST",
    url: '<?php echo get_template_directory_uri(); ?>/MYPAGE.php',
    data: { sort_order : jsonString },
    cache: false,
    success: function(responseData) {
        // consider using console.log for these kind of things.
        alert("Data recived: " + responseData);
    }
})

您将在此警报中的 PHP 代码中看到您 echo 的任何内容。只有这样你才能说你什么也没收到。

另外,json_decode 将返回一个 JSON 对象(如果您告诉它,也可以返回一个数组)。你不能像你在这里所做的那样echo 它。为此,您应该改用 print_r

$request = json_decode($_POST['sort_order']);
print_r($request);

而且我相信 javascript 代码中的 sort_order 仅在这个示例中是空的,您实际上是在实际代码中发送一些东西,对吧?

【讨论】:

  • @squGElm 感谢您的回复。首先,数组里面有元素。 js文件位于“模板文件夹->资产-> js”中,php文件位于模板文件夹中。我说我什么都看不到,因为当我尝试在 php 文件中打印或回显变量时,它在页面上什么也没有显示。
  • @M.Simon 您在页面上看不到任何内容,因为它是一个 ajax 请求,在您将某些内容放在那里之前,页面中不会有任何内容。当服务器响应一些数据时调用成功回调函数,然后您可以将这些数据放在您的页面中,无论您喜欢什么/任何地方。如果代码在js文件中,那么我确定php代码没有被执行,现在尝试将php文件的URI直接放在js代码中。
  • 当我在 wordpress 中尝试时,我得到控制台错误:未捕获的类型错误:无法读取未定义的属性 'ajax'
  • @5Diraptor 这可能是因为您没有在您的 Wordpress 主题中启用 jQuery。见digwp.com/2011/09/using-instead-of-jquery-in-wordpress
【解决方案2】:

问题出在您的网址中,javascript 无法解释 php 标签,我建议您将“get_template_directory_uri()”作为变量从主页传递:

<script>
  var get_template_directory_uri = "<?php get_template_directory_uri() ?>";
</script>

之后,在 url 属性中使用这个变量。

祝你好运。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2016-10-14
    • 2017-04-23
    • 2012-02-19
    相关资源
    最近更新 更多