2012-12-25 141 views
-2

我发现了一个非常好的基于jquery的captcha control如何将php转换为asp.net mvc

但他们写了一个PHP方法,我真的没有任何经验的PHP。

jquery的代码:

;(function($){ 
    $.fn.captcha = function(options){ 


    var defaults = { 
     borderColor: "", 
     captchaDir: "../../content/captcha", 
     url: "captcha/captcha.php", 
     formId: "myForm", 
     text: "Verify that you are a human,<br />drag <span>scissors</span> into the circle.", 
     items: Array("pencil", "scissors", "clock", "heart", "note") 
     };  

    var options = $.extend(defaults, options); 


    $(this).html("<b class='ajax-fc-rtop'><b class='ajax-fc-r1'></b> <b class='ajax-fc-r2'></b> <b class='ajax-fc-r3'></b> <b class='ajax-fc-r4'></b></b><img class='ajax-fc-border' id='ajax-fc-left' src='" + options.captchaDir + "/imgs/border-left.png' /><img class='ajax-fc-border' id='ajax-fc-right' src='" + options.captchaDir + "/imgs/border-right.png' /><div id='ajax-fc-content'><div id='ajax-fc-left'><p id='ajax-fc-task'>" + options.text + "</p><ul id='ajax-fc-task'><li class='ajax-fc-0'><img src='" + options.captchaDir + "/imgs/item-none.png' alt='' /></li><li class='ajax-fc-1'><img src='" + options.captchaDir + "/imgs/item-none.png' alt='' /></li><li class='ajax-fc-2'><img src='" + options.captchaDir + "/imgs/item-none.png' alt='' /></li><li class='ajax-fc-3'><img src='" + options.captchaDir + "/imgs/item-none.png' alt='' /></li><li class='ajax-fc-4'><img src='" + options.captchaDir + "/imgs/item-none.png' alt='' /></li></ul></div><div id='ajax-fc-right'><a target='_blank' href='http://www.webdesignbeach.com'><img id='ajax-fc-backlink' src='" + options.captchaDir + "/imgs/wdb.png' alt='Web Design Beach' /></a><p id='ajax-fc-circle'></p></div></div><div id='ajax-fc-corner-spacer'></div><b class='ajax-fc-rbottom'><b class='ajax-fc-r4'></b> <b class='ajax-fc-r3'></b> <b class='ajax-fc-r2'></b> <b class='ajax-fc-r1'></b></b>"); 
     var rand = $.ajax({ url: options.url,async: false }).responseText; 


    var pic = randomNumber(); 
    $(".ajax-fc-" + rand).html("<img src=\"" + options.captchaDir +"/imgs/item-" + options.items[pic] + ".png\" alt=\"\" />"); 
    $("p#ajax-fc-task span").html(options.items[pic]); 
    $(".ajax-fc-" + rand).addClass('ajax-fc-highlighted'); 
    $(".ajax-fc-" + rand).draggable({ containment: '#ajax-fc-content' }); 
    var used = Array(); 
    for(var i=0;i<5;i++){ 
     if(i != rand && i != pic) 
     { 
      $(".ajax-fc-" +i).html("<img src=\"" + options.captchaDir +"/imgs/item-" + options.items[i] + ".png\" alt=\"\" />"); 
      used[i] = options.items[i]; 
     } 
    } 
    $(".ajax-fc-container, .ajax-fc-rtop *, .ajax-fc-rbottom *").css("background-color", options.borderColor); 
    $("#ajax-fc-circle").droppable({ 
     drop: function(event, ui) { 
      $(".ajax-fc-" + rand).draggable("disable"); 
      $("#" + options.formId).append("<input type=\"hidden\" style=\"display: none;\" name=\"captcha\" value=\"" + rand + "\">"); 
     }, 
     tolerance: 'touch' 
    }); 
    }; 

})(jQuery); 

function randomNumber() { 
    var chars = ""; 
    chars += "."; 
    var size = 1; 
    var i = 1; 
    var ret = ""; 
     while (i <= size) { 
      $max = chars.length-1; 
      $num = Math.floor(Math.random()*$max); 
      $temp = chars.substr($num, 1); 
      ret += $temp; 
      i++; 
     } 
    return ret; 
} 

var rand = $.ajax({ url: options.url,async: false }).responseText; 

从PHP方法这是越来越值,它是在下列

<?php 
/* 
    captcha.php 
    jQuery Fancy Captcha 
    www.webdesignbeach.com 

    Created by Web Design Beach. 
    Copyright 2009 Web Design Beach. All rights reserved. 
*/ 
session_start(); /* starts session to save generated random number */ 

/* this compare captcha's number from POST and SESSION */ 
if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['captcha']) && $_POST['captcha'] == $_SESSION['captcha']) 
     { 
       echo "Passed!"; /* YOUR CODE GOES HERE */ 
       unset($_SESSION['captcha']); /* this line makes session free, we recommend you to keep it */ 
     } 
elseif($_SERVER['REQUEST_METHOD'] == "POST" && !isset($_POST['captcha'])) 
     { 
       echo "Failed!"; 
     } 
/* in case that form isn't submitted this file will create a random number and save it in session */ 
else 
     { 
       $rand = rand(0,4); 
       $_SESSION['captcha'] = $rand; 
       echo $rand; 
     } 
?> 

我看到,它生成一个随机数a nd将它保存在会话中,如果会话已经有它,它会发送它。

这里是我的asp.net代码

public string CaptchaControl() 
    { 
     string captha=""; 

     try 
     { 
      captha = HttpContext.Session["captcha"].ToString(); 
     } 
     catch (Exception) 
     { 

      Random rnd = new Random(); 
      captha = rnd.Next(0, 5).ToString(); 
      Session.Add("captcha", captha); 
     } 

     return captha; 

    } 

,这里是我的jQuery的方法

function GenerateNumber() { 
var numara = 0; 
    $.ajax({ 
     type: "post", 
     url: '@Url.Action("JqueryOku","Home")', 
     success: function (msg) { 
     numara = msg; 
      alert("captcha " + msg); 
     }, 
     error: function (request, status, error) { 

      alert("Hata oluştu: " + error + "\nHata Kodu: " + request.status); 
     } 
    }); 

return numara; 

}

通常情况下,它的工作原理如果它不是在这个JS文件。但如果我把这个代码,该文件就像

var rand = GenerateNumber(); 

我得到这个错误

  • POST loclhost:8383/Account/@Url.Action(%22JqueryOku%22%22Home%22) 500(内部服务器错误)jQuery的1.5.1.js:7315
  • 发送jQuery的1.5.1.js:7315
  • jQuery.extend.ajax jQuery的1.5.1.js:6776
  • $。 fn.captcha jquery.captcha.js:19(匿名功能)注册:57
  • deferred.resolveWith的jquery-1.5.1.js:865
  • jQuery.extend.ready的jquery-1.5.1.js:423
  • DOMContentLoaded的jquery-1.5.1.js:1058

JqueryOku方法在HomeController中。我不知道我的错误在哪里

+0

我真的不知道你为什么投下它:S – unbalanced

回答

1

我解决了我自己的问题。

我改变 网址: '@ Url.Action( “JqueryOku”, “家”)',

网址: “../../Home/JQueryOku”,

and works ..我认为单引号将其定义为字符串值