2016-06-16 8 views
1

Ich versuche, die benutzerdefinierte Bibliotheksfunktion mit Ajax wie folgt aufzurufen.Codeigniter - Wie kann man mit ajax auf benutzerdefinierte Funktionen zugreifen?

$(document).ready(function() 
{ 
     $("a.refresh").click(function() 
     { 
      jQuery.ajax(
      { 
       type: "POST", 
       url: "<?php echo base_url(); ?>" + "application/libraries/Captcha_lib/captcha_refresh", 
       success: function(res) 
       { 
        if (res) 
        { 
         jQuery("span.image").html(res); 
        } 
       } 
      }); 
     }); 
}); 

Ich erhalte die folgende Antwort in Firebug:

Sie haben keine Berechtigung das angeforderte Objekt zuzugreifen. Es ist entweder schreibgeschützt oder vom Server nicht lesbar.

Hinweis: Wenn ich setzte die captcha_refresh Funktion in meiner Anmeldung Controller und die URL wie unten

jQuery.ajax Ajax passieren ( { Typ: "POST", URL: "" + "Login/captcha_refresh", .....});

dann funktioniert es gut. Aber ich möchte es nicht tun.

Hier ist meine captcha_refresh Funktion:

public function captcha_refresh() 
{ 
     $values = array(
      'word' => '', 
      'word_length' => 8, 
      'img_path' => './hrms_assets/captcha_img/', 
      'img_url' => base_url() .'hrms_assets/captcha_img/', 
      'font_path' => base_url() . 'system/fonts/texb.ttf', 
      'img_width' => '150', 
      'img_height' => 50, 
      'expiration' => 3600 
     ); 
     $data = create_captcha($values); 
     $this->session->userdata['captchaWord'] = $data['word']; 
     echo $data['image']; 
} 
+0

Sie versuchen, zuzugreifen Bibliothek direkt sein, ich glaube, Sie haben Controller anrufen von Ihrem Ajax und in diesem Controller müssen Sie die Bibliotheksfunktion aufrufen. – kishor10d

+0

Ja, mein Fehler war, Bibliotheksfunktion direkt aufzurufen. Danke für die Antwort. @ kishor10d –

+0

So, funktioniert es jetzt ?? – kishor10d

Antwort

2

1) Create-Methode in der Steuerung 2) Rufen Sie Gleiche Bibliotheksfunktion captch_refresh in der Steuerung und Rück Daten aus Bibliotheksfunktion. Senden 3) Antwort von Controller-Methode

Ajax-Aufruf Url:

// Controller Code 
class Login extends MY_Controller { 

public function captcha_refresh() { 
    // load library 
    $this->load->library('captcha_lib'); 
    // call library function 
    echo $this->captcha_lib->captcha_refresh(); 
    exit(); 
} 


// Make Library method 
class Captcha_lib { 
public function captcha_refresh(){ 
    $CI =& get_instance(); 

    $values = array(
    'word' => '', 
    'word_length' => 8, 
    'img_path' => './hrms_assets/captcha_img/', 
    'img_url' => base_url() .'hrms_assets/captcha_img/', 
    'font_path' => base_url() . 'system/fonts/texb.ttf', 
    'img_width' => '150', 
    'img_height' => 50, 
    'expiration' => 3600 
    ); 
    $data = create_captcha($values); 
    $CI->session->userdata['captchaWord'] = $data['word']; 
    return $data['image']; 
} 

}

// JQuery-Code

$(document).ready(function() { 
    $("a.refresh").click(function() { 
    jQuery.ajax({ 
    type: "POST", 
    url: "<?php echo base_url('login/captcha_refresh'); ?>", 
    success: function(res) { 
    if (res) 
    { 
    jQuery("span.image").html(res); 
    } 
    } 
    }); 
    }); 
    }); 
+0

können Sie bitte ein wenig Code teilen. Ich verstehe nicht. –

+0

Bitte Siehe obigen Code. –

0

Versuchen Sie dieses:

$(document).ready(function() { 
      $("a.refresh").click(function() { 
       jQuery.ajax({ 
       type: "POST", 
       url: "<?php echo APPPATH; ?>" + "libraries/Captcha_lib/captcha_refresh", 
       success: function(res) { 
        if (res) 
        { 
         jQuery("span.image").html(res); 
        } 
       } 
       }); 
      }); 
      }); 

Oder Erstellen Sie einen Controller & rufen Sie Bibliothek dort drüben, um Ihre Funktion auszuführen.

class Welcome extends CI_Controller { 

    public function index() 
    { 
     $this->load->libraray('captcha_lib'); 
     echo $this->captcha_lib->captcha_refresh(); 
    } 
} 

Danach Ihre Ajax-URL sollte wie folgt sein: url: "<?php echo base_url('welcome/index'); ?>",

0

Sie sind falsch machen, Ihr Code: -

jQuery.ajax({ 

     type: "POST", 
     url: "<?php echo base_url(); ?>" + "application/libraries/Captcha_lib/captcha_refresh", 
     success: function(res) { 

      ..... 

In dieser URL wie diese sein " http://your-site/application/libraries/Captcha_lib/captcha_refresh ". es bedeutet, dass Sie einen Antrag auf diese URL machen, und es wird als Reaktion auf nur geben, wenn: -

  • Sie URL Rewrite verwendet diese in eine tatsächliche URL zu konvertieren
  • Diese ursprüngliche URL ist

Aber in Ihrem Fall ist keiner wahr.Ihre tatsächliche URL ist "http://my-site/application/libraries/Captcha_lib.php" und captcha_refresh ist eine Funktion in der Datei Captcha_lib.php. Es wird also nicht ausgeführt, indem nur die Datei Captcha_lib.php aufgerufen wird. Es ist so, dass Sie eine Datei mit Klasse basierend haben, aber es gibt keine main() Funktion.

So besser MVC (Model View Controller) Technik zu verwenden. Sie können einen Controller erstellen und die Bibliothek in der Steuerung wie folgt laden: -

<?php 

# application/controllers/HandleMe.php 

class HandleMe extends CI_Controller 
{ 

     function index() 
     { 
      $this->load->library('Captcha_lib'); 
      echo $this->captcha_lib->captcha_refresh(); 
     } 
} 

Und Ihre JavaScript-Code sollte

jQuery.ajax({ 
    type: "POST", 
    url: "<?php echo base_url(); ?>" + "index.php/HandleMe", 
    ..... 
Verwandte Themen