Inserir um registro de banco de dados de um formulário HTML com jQuery + AJAX é o que estou tentando fazer, mas não parece funcionar para mim.
O HTML parece com isso:
<form method="post" id="message-form">
<textarea id="new-message" name="message" placeholder="Nieuw bericht"></textarea>
<input type="hidden" id="message-sender" name="sender" value="<?=$_SESSION["user_id"]?>">
<input type="hidden" id="message-recipient" name="recipient" value="<?=$aConversationPartner["id"]?>">
<input type="submit" name="submit-message" id="send-message" value="Verstuur bericht">
</form>
O código jQuery se parece com isto:
$("#send-message").click(function (e) {
e.preventDefault();
if($("#new-message").val()==="")
{
alert("Uw bericht is leeg!");
return false;
}
var myData = "message="+ $("#new-message").val() + "&sender=" + $("#message-sender").val() + "&recipient=" + $("#message-recipient").val(); //build a post data structure
jQuery.ajax({
type: "POST",
url: "sendmessage.php",
dataType:"text",
data:myData,
success:function(response){
console.log("great succes");
}
});
});
sendmessage.php parece com isso:
<?
require_once("config.php");
require_once("lib.php");
sendMessage($_POST["sender"], $_POST["recipient"], $_POST["message"], 1);
?>
A função php sendMessage funciona perfeitamente se eu usá-lo sem AJAX, então esse não seria o problema. O que é muito estranho é que eu não recebo nenhum erro de console console.log("great succes");
é demitido. Eu sou novo para jQuery + AJAX e desesperado por uma resposta. Por favor, dê-me uma resposta que eu possa entender e implementar.
Respostas:
1 para resposta № 1Você deve colocar seus dados em um objeto JavaScript.
substituir
var myData = "message="+ $("#new-message").val() + "&sender=" + $("#message-sender").val() + "&recipient=" + $("#message-recipient").val();
de
var myData = {
message: $("#new-message").val(),
sender: $("#message-sender").val(),
recipient: $("#message-recipient").val()
};
1 para resposta № 2
Você não está escapando dos valores em sua string de consulta. Há duas maneiras fáceis de fazer isso com jQuery:
Usar
var myData = $("#message-form").serialize();
já que você está enviando todos os valores do formulário.Coloque os parâmetros em um objeto:
var myData = { message: $("#new-message").val(), sender: $("#message-sender").val(), recipient: $("#message-recipient").val() };
A maneira simples de Javascript é chamar encodeURIComponent
:
var myData = "message="+ encodeURIComponent($("#new-message").val()) +
"&sender=" + encodeURIComponent($("#message-sender").val()) +
"&recipient=" + encodeURIComponent($("#message-recipient").val());