JQuery.post()使用参数调用函数

时间:2016-06-09 作者:Karl Lim

我一直在网上搜索这个,但似乎没有这样的主题(或者可能我搜索的方向不对)。

目前,我有一个jQuery文件,它将从数据库中检索9篇额外的帖子,并附加到当前帖子列表中。

File: load-more.js

var data = {
    action: \'be_ajax_load_more(tv)\', // <-- this is the function in functions.php
    nonce: beloadmore.nonce,
    page: page,
    query: beloadmore.query
};

$.post(beloadmore.url, data, function(res) {
    ... code function to handle additional posts
}

File: functions.php

function be_ajax_load_more($category) {
    check_ajax_referer( \'be-load-more-nonce\', \'nonce\' );

    error_log( \'Made it into the be_ajax_load_more function\');
    error_log($category);  // <-- this value is empty

    return morePosts;
}
如果我同时更改数据的两个值,它的效果会非常好。操作=\'be\\u ajax\\u load\\u more\'和函数be\\u ajax\\u load\\u more(),该函数不接收任何参数,但一旦我添加了参数,则。post函数无法识别它。

我是否正确传递了参数?我甚至尝试在我的数据数组中添加一个新的键值:

var data = {
    action: \'be_ajax_load_more\',
    category: \'tv\',
    nonce: beloadmore.nonce,
    page: page,
    query: beloadmore.query
};
但我不知道如何获得这些数据。我的功能中的类别。php,有人能帮忙吗?

谢谢

3 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

第二个JS设置的方向更正确,最大的错误似乎是误解了如何在WP PHP/服务器端处理ajax请求。

在PHP方面,将根据AJAX请求中的action参数触发一个操作。由于这是一种通用机制,因此它没有任何工具来“猜测”传递了多少参数或它们的顺序(可能已经开发了一些工具来实现这一点,但当前的核心代码没有做到这一点)。因此,您所能得到的最好方法是触发对be_ajax_load_more 收到请求时的功能。

在函数本身中,您需要从$_POST 获取参数的相关字段。IIRC这应该是$_POST[\'category\'] 这应该给你价值\'tv\'

SO网友:Aishan

可以将数据值解析为变量($formdata) 然后可以通过以下方式访问您喜欢的数据:

parse_str( $_POST[ \'data\' ], $formdata );
$category = $formdata[ \'category\' ];

SO网友:leesara

您只是以错误的方式传递参数,因此会出现错误。

当您的代码中出现一些错误时,请始终进行基本操作。这将帮助你发现你什么时候做错了。必须将参数传递给jQuery Post()方法。

这是如何做到的:

$.post("result.php",
    {
        name: $("#name").val(),
        age: $("#age").val()
    })
此处,名称和年龄是类型文本控件的输入。请参见本节中给出的使用此方法的一些示例jQuery Post 教程还告诉您可以使用。fail()和。此方法上的done()事件。

因此,在您的情况下,您可以使用。fail()延迟事件,以找出代码中出现的错误。

Note – 您还可以使用Chrome浏览器控制台窗口来查找这些错误。