2016-09-26 1 views
1

私はPHP/jQueryプロジェクトで奇妙な振る舞いをしています。Ajaxのスロー機能が失敗する...しかし、それは何をすべきかを実行します

私はAjaxリクエストを呼び出すと意図したとおりに動作しますが、 'done'関数を呼び出す代わりに 'fail'を呼び出します。

これは現時点での私のコードです。

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

     }); 
}); 

そして、これが

<?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"); 
} 

?> 

私install_ajax.phpあるメッセージは、

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

しかしテーブルに 'ユーザ' ..私は、コンソール上で取得する設定ファイルをされて警告し、管理者ユーザーは作成されます。

どうすれば修正できますか?

私は、要求に応じて機能のコードを提供します。

+0

'の/ var/tmpに/ error.log'言うのでしょうか? –

+0

まったく何も、エラーは印刷されません。 –

+0

あなたは実際にそのURLを打つことを確かめなければなりません、Chromeのインスペクタ内の 'network'タブを調べて、応答が何であるかを見てみましょう..ちょうど404や何か似たようなものを排除するために.. –

答えて

1

使用して出力を返すために、この

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

これは完全に動作します! $( "#button")だった場合の動作は同じですか? 送信イベントとpreventDefaultの違いと、ボタンの通常のクリックイベントの違いはありませんか? –

0

私はあなたが見るエラーがあなたのコードは2回を提出するということだと思い

return json_encode($return); 

代わりの

return_json($return); 
+0

何もすることは、エラー機能をスローします.. –

+0

アラートボックスのエラーは何ですか? –

+0

[オブジェクトオブジェクト] –

0

試してみてください..この行を追加してみてください:

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

これは今OKに動作するはずです。..

+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 
関連する問題