2016-04-23 12 views
0

私はこのサイトや他のサイトを数時間探しているので、私はかなり切望しています。 同じトピックの多くの質問からのコードはありません。PHPスクリプトからのAJAXの応答が機能しない

データをデータベースに挿入し、完了後にメッセージを表示する必要があります。また、jQueryでAJAXを使用しているため、非同期になります。正常に動作し、データは挿入されますが、応答メッセージは表示されません。

私はPHPの初心者です。なぜこれがうまくいかないのか分からないことがあります。以下の関連コード。

PHP関数呼び出し:Brokerから

if(isset($_POST["function"]) && !empty($_POST["function"]) && $_POST["function"] == "cl-add") { 
     $dbb->addMember("MyUsername", $_POST["name"]); 
     //$dbb is a DataBaseBroker instance 
} 

PHP関数:

function addMember($username, $ime) { 
    $query = "INSERT INTO clan"; 
    $query.=" (username, ime) "; 
    $query.="VALUES ('".$username."','".$ime."');"; 

    $result = $this->mysqli->query($query); 

    if ($result) { 
     echo("You added a member: ".$ime); 
    } else { 
     $response = "An error occured. Please try again."; 
     $response .= "<br>"; 
     $response .= "Error: ".mysqli_error($connection); 
     echo $response; 
    } 
} 

jQueryの関数宣言:

var addMember = function(name, responseFn) { 
    if (name === "") { 
     alert("Please enter a name"); 
     return; 
    } 
    $.ajax({ 
     type : 'POST', 
     url: '../includes/layout/cl.php', 
     dataType : 'json', 
     data : { 
      'name' : name, 
      'function' : 'cl-add' 
     }, 
     success : function(data) { 
      responseFn(data); //not working, should alert 
     } 
    }); 
} 

var responseCallback = function(data) { 
    alert(data); 
} 

$(ドキュメント).ready(内側)

$(document).on('click', '#cl-add', function(evt) { 
    var name = $("#cl_frm input").val(); 
    addMember(name, responseCallback); 
}); 
+0

問題は、 'データ型を使用してしなければならないということはおそらくです。 PHPコードで文字列をエコーするだけであれば、ajaxデータ型でそれを扱うべきです。 'echo json_encode($ my_variable_or_array);'としてそれをエコーすると、それをjsonオブジェクトとして使うことができます。 – bucketman

+0

成功コールバックの代わりに完了を聞いてみましたか? –

+0

'dataType: 'text'、'成功:function(data){ アラート(データ); } '一度チェック –

答えて

2

dataType : 'json', 

Ajaxリクエストは、JSON応答を待っていますが、テキストの応答を与えています。

必要に応じてdataType:をtextまたはhtmlに変更する必要があります。

dataType : 'html', 

または

dataType : 'text', 

PHPの変更:「text'`:

<?php 
function addMember($username, $ime) 
{ 
    $query = "INSERT INTO clan"; 
    $query .= " (username, ime) "; 
    $query .= "VALUES ('" . $username . "','" . $ime . "');"; 

    $result = $this->mysqli->query($query); 

    $response = null; 

    if ($result) { 
     $response = "You added a member: " . $ime; 
    } else { 
     $response = "An error occured. Please try again."; 
     $response .= "<br>"; 
     $response .= "Error: " . mysqli_error($connection); 
    } 

    echo $response; 
    exit; 
} 
+0

はい、それは動作します。しかし今、フォームのHTMLコード全体を警告で表示します。メッセージはそこにありますが、HTMLの下にあります。あなたはこの問題に遭遇しましたか? ご協力いただきありがとうございます。 –

+0

@NikolaMarkovic私はあなたがそのファイルにcl.phpの何かを出力していたのを知りませんでした。ビューテンプレートをロジックから分離しようとします。または 'exit'を追加してください。エコー後に私の答えに更新したコードのようなメッセージの応答 –

0

dataTypeパラメータを 'text'に変更します。また、JavaScriptでオブジェクトを警告することもできますが、実際にはオブジェクトに警告するつもりはありませんが、言及したかっただけです。あなたのコードで

関連する問題