【问题标题】:Why is this returning 0?为什么返回 0?
【发布时间】:2015-11-13 17:05:29
【问题描述】:

我正在尝试制作自定义验证码生成器。简而言之,服务器通过 AJAX 返回图像的 URL,并在会话存储中保持与图像的关联。

PHP:

add_action( 'wp_ajax_set_animal_captcha', 'set_animal_captcha' );
$capdir = get_template_directory_uri() . '/assets/captcha/';
$capmap = array ( 'cat'  => $capdir . 'Captcha_Cat.png',
                  'dog'  => $capdir . 'Captcha_Dog.png',
                  'fish' => $capdir . 'Captcha_Fish.png' );
function set_animal_captcha ( )
{
    // returns image url of random animal and stores in session storage
    // a reference to that animal
    $randAnimal = array_rand($capmap,1);
    $_SESSION['randAnimal'] = $randAnimal;
    die(json_encode($capmap[$randAnimal]));
}

JS:

function capHandler ( imgid )
{
    // imgid: id of the image 

    this.imgid = imgid;
    this.formData = new FormData();
    this.formData.append('action', 'set_animal_captcha');
    this.set = function ( )
    {
        $.ajax({
            url: ajaxurl,
            type: 'POST',
            async: false,
            success: function ( animalUrl ) { alert(animalUrl); },
            error: function ( ) { alert("Error in getting captcha image") },
            cache: false,
            contentType: false,
            processData: false
        });
    }
}

我的问题是它正在发出警报

0

我不知道为什么。因为我知道success函数被调用了,所以PHP肯定有问题。

【问题讨论】:

  • 您是否查看过浏览器的开发人员工具,了解 Ajax 请求实际返回的内容?
  • 不要alerting,试试console.log( animalUrl );可能更适合输出结果。
  • $capmap 声明为函数内的全局变量——即:global $capmap;

标签: javascript php ajax wordpress


【解决方案1】:

为什么将$capmap 设置在set_animal_captcha() 之外?如果您确实必须将其保留在set_animal_captcha 之外,则将$capmap 设置为函数内部的全局变量。像这样:

function set_animal_captcha ( )
{
    global $capmap;
    // returns image url of random animal and stores in session storage
    // a reference to that animal
    $randAnimal = array_rand($capmap,1);
    $_SESSION['randAnimal'] = $randAnimal;
    die(json_encode($capmap[$randAnimal]));
}

【讨论】:

  • 我刚刚尝试过,还将die 语句更改为die("lkajdkasldaskljd");,但仍然返回0 .... 也许我的服务器已缓存此值以发回?
  • 你需要检查你的ajax请求返回了什么,alert不可靠。 console.log 可以返回更详细的信息。
  • @MarkKrapivner console.log 也在打印0
  • 我开始认为你的代码没有达到 set_animal_captcha( ),你有像 xdebug 这样的逐步调试器吗?
  • @MarkKrapivner 问题是我忘记在$.ajax 调用中添加data: this.formData 作为参数。因为您指出了另一个问题,所以将您选为最佳答案。
【解决方案2】:

请在你返回一些值的地方写上这个语句:

 die();

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2022-01-23
    • 1970-01-01
    • 2011-03-01
    • 2011-07-01
    • 2011-01-17
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多