首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery Ajax PHP函数调用返回[对象对象]

问jQuery Ajax PHP函数调用返回[对象对象]
EN

WordPress Development用户
提问于 2019-02-20 05:18:44
回答 1查看 2.4K关注 0票数 0

我想使用jQuery Ajax重新加载页面。我有下面的代码,但是它不工作,正在返回错误的[object Object]

这只是一个简单的语法问题,还是我的整个逻辑有问题?它在没有Javascript的情况下运行得很好,但是我认为jQuery Ajax的UI更直观。

functions.php s.php

代码语言:javascript
复制
//enqueue scripts
function my_theme_enqueue_scripts() {
     wp_enqueue_script('jquery-ui', 'https://code.jquery.com/ui/1.12.1/jquery-ui.min.js', array('jquery'), '1.12.1');
     wp_register_script( 'myjs', get_stylesheet_directory_uri() . '/my.js', array('jquery'),'1.0.0');
     wp_enqueue_script('myjs');
     wp_localize_script( 'ajax-script', 'admin-ajax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_scripts' );

function load_projectmessages($projectid) {
     global $wpdb;
     $sql_displaymessages = $wpdb->prepare("some sql", $projectid );
     $projectmessages = $wpdb->get_results($sql_displaymessages);
     return $projectmessages;
     wp_die();
}
add_action('wp_ajax_load_projectmessages', 'load_projectmessages');

Page模板PHP:

代码语言:javascript
复制

my.js

代码语言:javascript
复制
function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');

            if($.inArray(hash[0], vars)>-1)
            {
                vars[hash[0]]+=","+hash[1];
            }
            else
            {
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }
        }
        return vars;
    }

    $("#form-pm").submit(function(e) {

        e.preventDefault();
        var pID = getUrlVars()["id"];
        $.ajax({
            url: "admin-ajax.ajax_url",
            type: "POST",
            data: {
                action: "load_projectmessages",
                projectid: pID
            },
            success: function(data) { },
            error: function(errorData) { alert(errorData); }
        });
        return false;
    });
EN

回答 1

WordPress Development用户

发布于 2019-02-20 08:22:33

好吧,所以你的代码有很多问题.

1.脚本

的不正确本地化

下面是您的函数,它对脚本进行排队和本地化:

代码语言:javascript
复制
function my_theme_enqueue_scripts() {
     wp_enqueue_script('jquery-ui', 'https://code.jquery.com/ui/1.12.1/jquery-ui.min.js', array('jquery'), '1.12.1');
     wp_register_script( 'myjs', get_stylesheet_directory_uri() . '/my.js', array('jquery'),'1.0.0');
     wp_enqueue_script('myjs');
     wp_localize_script( 'ajax-script', 'admin-ajax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_scripts' );

因此,您可以本地化名为ajax-script的脚本,但是没有这样的脚本注册。它应该是:

代码语言:javascript
复制
wp_localize_script( 'myjs', 'admin-ajax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

2.变量

的不正确名称

在wp_localize_script中,第二个参数是将在JS中创建的变量的名称。您将admin-ajax放入其中,这并不是变量的正确名称。

改为:

代码语言:javascript
复制
wp_localize_script( 'myjs', 'MyJS_Data', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

3. $.ajax call

中不正确的AJAX url

在my.js文件中有:

代码语言:javascript
复制
$("#form-pm").submit(function(e) {

    e.preventDefault();
    var pID = getUrlVars()["id"];
    $.ajax({
        url: "admin-ajax.ajax_url",
        type: "POST",
        data: {

所以您将字符串"admin-ajax.ajax_url"字符串作为URL传递,这不是一个正确的url地址.

它应该是:

代码语言:javascript
复制
url: MyJS_Data.ajax_url,

因为您想使用变量,而不是字符串,我们在2中更改了变量的名称.

4. AJAX回调函数的错误使用.

在PHP代码中有:

代码语言:javascript
复制
function load_projectmessages($projectid) {
     global $wpdb;
     $sql_displaymessages = $wpdb->prepare("some sql", $projectid );
     $projectmessages = $wpdb->get_results($sql_displaymessages);
     return $projectmessages;
     wp_die();
}
add_action('wp_ajax_load_projectmessages', 'load_projectmessages');

但是..。这个函数不会打印任何内容,所以AJAX请求不会得到任何结果。

另一方面,你做了两件事:

代码语言:javascript
复制
 return $projectmessages;
 wp_die();

因此,您的函数将返回(而不是打印) $projectmessages。下一行将不会被调用,因为当您返回一个值时,函数将结束它的执行。

所以应该是这样的:

代码语言:javascript
复制
function load_projectmessages($projectid) {
     global $wpdb;
     $sql_displaymessages = $wpdb->prepare("some sql", $projectid );
     $projectmessages = $wpdb->get_results($sql_displaymessages);
     echo json_encode( $projectmessages );
     wp_die();
}
add_action('wp_ajax_load_projectmessages', 'load_projectmessages');

这样,您的函数将“返回”以JSON编码的$projectmessages。

票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/329295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档