2016-09-26 1 views
1

Ich habe ein seltsames Verhalten in meinem PHP/jQuery-Projekt.Ajax werfen Fail-Funktion ... Aber es tut, was es tun sollte

Wenn ich die Ajax-Anfrage aufruft, funktioniert es wie gewünscht, aber anstatt die "Done" -Funktion aufzurufen, wird die "Fail" -Funktion aufgerufen.

Dies ist mein Code im Moment.

$("#form").submit(function(){ 

    var _this = $(this); 
    var values = {}; 
    $.each($('#form').serializeArray(), function(i, field) { 
     values[field.name] = field.value; 
    }); 
    // _this.button('loading'); 
    $.ajax({ 
     method: "POST", 
     url: "include/ajax/install_ajax.php", 
     data: values, 
     dataType: 'json' 
    }) 
     .done(function(msg) { 
     console.log("Done: " + msg); 
     }) 
     .fail(function(xhr, textStatus, errorThrown){ 
      console.warn('Xhr: ' + xhr.responseText); 
      console.warn('textStatus: ' + textStatus); 
      console.warn('errorThrown: ' + errorThrown); 

     }); 
}); 

Und das ist mein install_ajax.php

<?php 

// Chiama le funzioni del sito 
require('../functions.php'); 

// Controlla se è una richiesta AJAX. 
is_ajax(); 


    try { 

    $args['db_host'] = $_POST['db_host']; 
    $args['db_username'] = $_POST['db_username']; 
    $args['db_password'] = $_POST['db_password']; 
    $args['db_name'] = $_POST['db_name']; 
    $args['admin_email'] = $_POST['admin_email']; 
    $args['admin_username'] = $_POST['admin_username']; 
    $args['admin_password'] = $_POST['admin_password']; 

    $structure = 
    "-- -------------------------------------------------------- 

    -- 
    -- Struttura della tabella `users` 
    -- 

    CREATE TABLE IF NOT EXISTS `users` (
     `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
     `username` text COLLATE utf8mb4_unicode_ci NOT NULL, 
     `email` text COLLATE utf8mb4_unicode_ci NOT NULL, 
     `name` text COLLATE utf8mb4_unicode_ci NOT NULL, 
     `surname` text COLLATE utf8mb4_unicode_ci NOT NULL, 
     `password` text COLLATE utf8mb4_unicode_ci NOT NULL, 
     `admin` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', 
     `validated` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', 
     PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=1 ;"; 

    installDB($args['db_host'],$args['db_username'],$args['db_password'],$args['db_name'],$structure); 

    createAdmin($args['db_host'],$args['db_username'],$args['db_password'],$args['db_name'],$args['admin_email'], $args['admin_username'], $args['admin_password']); 

    createConfig($args['db_name'],$args['db_username'],$args['db_password'],$args['db_host']); 
    $return = array(); 

    $return['success'] = true; 

    return_json($return); 

} catch (Exception $e) { 
    error_log($e->getMessage() . "\n", 3, "/var/tmp/error.log"); 
} 

?> 

Die Nachricht warnen ich auf der Konsole ist ..

core.js:31 Xhr: undefined 
core.js:32 textStatus: error 
core.js:33 errorThrown: undefined 

Aber die Tabelle 'users', die Konfigurationsdatei und der Admin-Benutzer wird jedoch erstellt.

Wie kann ich es beheben?

Ich werde den Code der Funktionen auf Anfrage zur Verfügung stellen.

+0

was bedeutet '/ var/tmp/error.log' sagen? –

+0

Absolut nichts, kein Fehler wird ausgedruckt. –

+0

Sie müssen sicher sein, dass Sie tatsächlich diese URL treffen. Versuchen Sie, die Registerkarte "Netzwerk" im Chrome-Inspektor zu überprüfen, um zu sehen, was die Antworten sind .. nur um die 404 oder etwas Ähnliches auf dem Weg zu beseitigen .. –

Antwort

1

Ich denke, dass der Fehler, die Sie sehen, dass Ihr Code 2 mal einreicht .. Versuchen Sie, diese Zeile hinzuzufügen:

$("#form").submit(function(event){ 
    event.preventDefault(); //prevent form from submitting, and only do ajax call 
    var _this = $(this); 
    // etc code.. 
} 

sollte ok jetzt arbeiten ..

+0

Dies funktioniert perfekt! Das Verhalten wäre das gleiche, wenn es ein $ ("# button") wäre. Oder gibt es keine Unterschiede zwischen einem Submit Event mit einem preventDefault und einem normalen Click Event auf der Schaltfläche? –

0

Versuchen Sie, diese

$("#form").submit(function(){ 
    var _this = $(this); 
    var values = {}; 
    $.each($('#form').serializeArray(), function(i, field) { 
     values[field.name] = field.value; 
    }); 
    // _this.button('loading'); 
    $.ajax({ 
     method: "POST", 
     url: "include/ajax/install_ajax.php", 
     data: values, 
     dataType: 'json', 
     success: function(response){ 
     alert(response); 
     }, 
     error: function(error){ 
     alert(error); 
     } 
    }); 
}); 
+0

Nichts zu tun, wirft es die Fehlerfunktion .. –

+0

Was ist der Fehler in der Alarmbox? –

+0

[Objekt Objekt] –

0

versuchen Ihre Ausgabe zurückzukehren mit

return json_encode($return); 

statt

return_json($return); 
+0

Dies funktioniert nicht .. Sorry odaai .. [Object] Fail Response, wie zuvor –

0
In PHP 
    in try 
    statement add echo json_encode(array('success'=>'1')); die; 

and in Catch statement add echo json_encode(array('failed'=>'1')); die; 


    replace your jquery submit code with below 

    $("#form").submit(function(submitEvent){ 
     submitEvent.preventDefault(); 
     var _this = $(this);  
     // _this.button('loading'); 
     $.ajax({ 
      method: "POST", 
      url: "include/ajax/install_ajax.php", 
      data: _this.serializeArray(), 
      dataType: 'JSON', 
      success: function(response){ 
      console.log(response); 
      }, 
      error: function(error){ 
      console.warn(error); 
      } 
     });  
    }); 

and check browser console 
Verwandte Themen