2015-11-13 249 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();