2015-11-13 190 views
3

我正在尝试制作自定义captcha生成器。简而言之,服务器通过AJAX返回一个图像的URL,并保持会话存储与图像的关联。这是为什么返回0?

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一定有什么问题。

+1

你看了你的浏览器的开发工具,看看Ajax请求实际返回什么? –

+1

而不是提醒,尝试'console.log(animalUrl);'可能更适合输出结果。 – Chris

+0

在函数中声明'$ capmap'是全局的 - 也就是说:'global $ capmap;' – RamRaider

回答

3

为什么你要为$capmapset_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])); 
} 
+0

这个感觉对与错同时lol – Chris

+0

我刚刚试过,并且把'die'语句改成'die(“lkajdkasldaskljd “);'但仍然得到'0'返回....也许我的服务器缓存了这个值发回? –

+0

你需要检查你的ajax请求返回的是什么,alert不可靠。 console.log可以返回更详细的信息。 –

-2

请死于你在哪里返回由把这个一些值的语句:

die();