2016-09-26 47 views
1

我在我的PHP/jQuery项目中有一个奇怪的行为。Ajax抛出失败函数...但它做它应该做的事

当我调用Ajax请求时,它按预期工作,但不是调用'done'函数,而是调用'失败'函数。

这是我目前的代码。

$("#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); 

     }); 
}); 

这是我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"); 
} 

?> 

消息提醒我上控制台..

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

但表 '用户',配置文件和管理员用户被创建。

我该如何解决?

我会按要求提供功能的代码。

+0

是什么'/ var/tmp中/ error.log'说? –

+0

绝对没有,没有错误被打印出来。 –

+0

您必须确定您确实在浏览该网址,请尝试检查Chrome检查器中的“网络”标签,以查看回复内容。只是为了消除404或类似的东西。 –

回答

1

我认为,您看到的错误是你的代码提交2次来回报您的输出..尝试添加此行:

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

这应该好的工作现在..

+0

这完美的作品! 如果它是$(“#button”),行为将是相同的。 或者按钮上的提交事件与preventDefault和正常Click事件之间没有区别? –

0

试试这个

$("#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

无事可做,它引发错误功能.. –

+0

警告框上的错误是什么? –

+0

[object object] –

0

尝试使用

return json_encode($return); 

,而不是

return_json($return); 
+0

这不工作太..对不起odai .. [对象对象]失败响应,如前 –

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 
相关问题