2016-04-23 67 views
0

我正在搜索此站點和其他站點幾個小時,所以我越來越絕望。 這裏沒有相同主題的許多問題的代碼工作來自PHP腳本的AJAX響應不起作用

我需要將數據插入數據庫並在完成後顯示消息。另外,我在jQuery中使用AJAX,所以它會是異步的。它工作得很好,數據被插入,但沒有響應消息顯示。

我是PHP的初學者,不能無視這爲什麼不起作用。下面的相關代碼。

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函數聲明:從代理

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

PHP函數

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

而且裏面$(文件)。就緒()

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

的問題可能是,你應該使用'數據類型:「text''。如果你只是在php代碼中回顯一個字符串,你應該在ajax數據類型中處理它。如果你將它作爲echo echo json_encode($ my_variable_or_array);''你可以將它用作json對象。 – bucketman

+0

你有沒有試過聽完成而不是成功回調? –

+0

dataType:'text','and'success:function(data){alert(data); }'檢查一次 –

回答

2

在你的代碼:

dataType : 'json', 

Ajax請求正在等待一個JSON響應,但你給人一種文本響應。

您應該根據需要將dataType:更改爲text或html。

dataType : 'html', 

dataType : 'text', 

PHP變化:

<?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

是的,這工作。但是現在它將alert中的整個HTML代碼顯示出來。消息在那裏,但在HTML下面。你有沒有遇到過這個問題? 感謝您的幫助。 –

+0

@NikolaMarkovic我不知道你輸出的文件cl.php旁邊只有函數或php邏輯。嘗試將視圖模板與邏輯分開。或者添加'exit';在回覆消息響應之後,就像我在我的答案中更新的代碼一樣 –

0

將dataType參數更改爲'text'。你也可以通過JavaScript提醒一個對象,實際上你並沒有試圖提醒一個對象,但我只是想提到它。