2016-07-12 16 views
0

hart kämpft Antwort vom Controller nach unten auf Änderungswert von Drop zu bekommen, aber immer internem ServerfehlerAjax und Json in cakephp 3.x

$(document).ready(function() { 
    //alert("ready!"); 
    $('#devices-types-id').on('change', function() { 
     alert(this.value); 

     $.ajax({ 
       type:"POST", 
       url: "<?php echo Router::url(array('controller'=>'FeaturesLists','action'=>'ajax_get_parent', '_ext' => 'json'));?>", 
       dataType: 'text', 
       async:false, 
       success: function(data){ 
        alert(data); 
       }, 
       error: function (data) { 
        alert(data); 
       } 
      }); 

    }); 

aber immer Fehler mit Pfad zuerst

POST http://localhost/compare_devices/features-lists/%3C?php%20echo%20Router::ur…ction%27=%3E%27ajax_get_parent%27,%20%27_ext%27%20=%3E%20%27json%27));?%3E 404 (Not Found)

Wenn ich Pfad in Ajax-Aufruf wie diese URL schreibe: "/ ajax_get_parent" dann gibt es keinen Pfadfehler aber "Interner Server Fehler"

POST http://localhost/compare_devices/features-lists/ajax_get_parent 500 (Internal Server Error) 

Controller-Code

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('RequestHandler'); 
    $this->Auth->allow(['ajaxGetParent']); 
} 
public function ajaxGetParent() { 
    $this->layout = false; 
    $this->set('text', 'SUCCESS'); 
    $this->set('_serialize', ['text']); 
} 

In routes.php Ich habe diese Linie

Router::extensions('json', 'xml'); 

ich versuche, in json zu bekommen führen, aber nicht in der Lage. Kannst du mir einfach zeigen, wie ich das machen kann? Viele Fragen sind bereits mit dem gleichen Thema auf "SO" gepostet, aber die meisten von ihnen sind für CakePHP 2.x und ich habe einige verschiedene Lösungen (Hilfe von SO und Google) versucht, aber konnte es nicht lösen. Kannst du mir zeigen, wie ich in JSON Antwort bekommen und Pfadprobleme lösen kann?

+0

Wo haben Sie Ihr jQuery-Skript? – Salines

+0

mit jquery Online-Echo $ this-> Html-> Skript ('http://code.jquery.com/jquery.min.js'); echo $ this-> Html-> script ('featureList.js'); Rest des Codes in separate Datei mit dem Namen 'featureList.js' und dann in der Ansichtsdatei – coder

+0

enthalten Sie eine .js-Datei, so dass Sie nicht PHP-Datei, da es nicht geparst werden kann. Deshalb erhalten Sie den Fehler 404. Über den 500-Fehler müssen Sie sich die Logs ansehen, um zu sehen, was passiert. Haben Sie die RequestHandler-Komponente geladen? – arilia

Antwort

1

Versuchen Sie, Erweiterungen ein Array:

Router::extensions(['json', 'xml']); 

Hier ist ein Ajax-Aufruf, die für mich funktioniert:

// ajax jquery testing 
function doAjaxTest() { 
    $.ajax({ 
     async:false, 
     url: '/requests/get-order-info/123123/2121.json', 
     success: function(data){ 
      alert(data); 
     }, 
     error: function (data) { 
      alert(data); 
     } 
    }); 
} 

Controller-Funktion ist:

$response['result'] = "success"; 
$response['has_info'] = false; 

$this->set(compact('response')); 
$this->set('_serialize', ['response']); 

Sie auch Zugang versuchen könnten die erforderliche URL im Browser direkt. Überprüfen Sie auch die Protokolle auf den genauen Serverfehler. Verwenden Sie Bindestriche anstelle von Unterstrichen in der URL.

0

set '_voll' parameter zu true.

url: "<?php echo Router::url(
     array(
      'controller'=>'FeaturesLists', 
      'action'=>'ajax_get_parent', 
      '_ext' => 'json', 
      '_full' => true //for full url path 
    ));?>", 
+0

POST abrufen http: // localhost/compare_devices/features-lists/ajax_get_parent 500 (Interner Serverfehler) – coder

1

Wenn Ihre jQuery-Code auf der gleichen Seite ändern Aktionsname:

url: "<?php echo Router::url(
    array(
    'controller'=>'FeaturesLists', 
    'action'=>'ajaxGetParent', // <-------- 
    '_ext' => 'json' 
));?>", 

wenn Ihre jQuery-Code in extern ist.js-Datei:

url: $('#devices-types-id').data('ajax-url); 

und Ihrer Ansicht hinzufügen:

$this->Form->input('device_type_id', 
    ['data-ajax-url' => $this->Url->build([ 
    'controller'=>'FeaturesLists', 
    'action'=>'ajaxGetParent', 
    '_ext' => 'json']) 
]); 

In Router:

Router::extensions(['json']); 

Controller-Methode

public function ajaxGetParent() { 
    //remove or comment this line, cakephp by default use ajax.ctp layout. 
    #$this->layout = false; 

    $this->set('text', 'SUCCESS'); 
    $this->set('_serialize', ['text']); 
} 

wenn ich schreibe Pfad in Ajax-Aufruf wie diese url: "/ ajax_get_parent" dann ist es nicht Wegfehlers geben, aber "Interner Serverfehler"

Versuchen:

POST http://localhost/compare_devices/features-lists/ajax-get-parent.json