Ajax nem ad vissza választ

Ajax nem ad vissza választ
2013-11-16T15:21:22+01:00
2013-11-17T14:17:25+01:00
2022-11-30T01:10:35+01:00
geforce9600
Hello!
A folyamat végén miért nem kapok semmi választ? A message div eltünik, overlay div pedig marad és ennyi volt.

<div id="resultDiv2"></div> <div id="messageDiv"> <h2>Privát üzenet küldése</h2> <form id="" method="post"> <div class="messageContainer"> <span>Az üzenet tárgya</span> <input type="text" id="targy" name="input_targy" class="messageInput" /> </div> <div class="messageContainer"> <span>Az üzenet szövege</span> <textarea name="input_uzenet" id="uzenet" class="messageTextarea"></textarea> </div> <input type="hidden" name="input_kuldo" value="<?php echo $_SESSION['user_logged_in']['id']; ?>" /> <input type="button" id="sendMessage" value="Üzenet küldése" /> <input type="button" id="CloseMessageDiv" value="Ablak bezárása" /> </form> </div>
sendMessage.click(function() { var myDate = new Date(); var actualDate = (myDate.getFullYear()) + '-' + (myDate.getMonth()+1) + '-' + myDate.getDate(); $.ajax ({ url: 'files/sendmessage.php', type: 'POST', data: { kuldo: $('input[name=input_kuldo]').val(), cimzett: $('#messageButton').attr('class'), targy_szovege: $('input[name=input_targy]').val(), uzenet_szovege: $('textarea[name=input_uzenet]').val(), datum: actualDate, status: 'Új üzenet' }, success: function(data) { var result = $.trim(data); MessageDiv.fadeOut('fast'); resultDiv2.fadeIn('fast'); resultDiv2.html(result); setTimeout(function() { resultDiv2.fadeOut('fast'); overlay.fadeOut('fast'); }, 3000) } }); });

<?php include_once("connect.php"); //sleep(3); $kuldo = $_POST['kuldo']; $cimzett = $_POST['cimzett']; $targy = $_POST['targy_szovege']; $uzenet = $_POST['uzenet_szovege']; $datum = $_POST['datum']; $status = $_POST['status']; if(empty($kuldo) || empty($cimzett) || empty($targy) || empty($uzenet) || empty($status)) { echo '<h2>Küldés sikertelen, kérem próbálja újra.</h2>'; } else { $insert = mysqli_query($kapcs, "INSERT INTO uzenet(kuldo,cimzett,targy,uzenet,datum,status) VALUES('".$kuldo."','".$cimzett."','".$targy."','".$uzenet."','".$datum."','".$status."')") or die("Küldés sikertelen, kérem próbálja újra..".mysqli_error($kapcs)); if($insert) { echo '<h2>Üzenet elküldve.</h2>'; } } ?>
Mutasd a teljes hozzászólást!
Szerintem meg ez a gond: resultDiv2.html(result);

Én sem vagyok egy ász, sőt egy amatőr, de ezt így kell:

PHP: echo 'Üzenet elküldve';

jQuery:

$("#resultDiv2").html('<h2>' + data + '</h2>');

A PHP - től sima szövegeket kell kapni, azt utána a kliensen kell designolni a dolgokat.
Mutasd a teljes hozzászólást!

  • Íratsd ki a visszakapott data-t


    ... success: function(data) {alert(data); ...

    Itt meglátod, ha esetleg valami php hibaüzenet van.

    szerk:

    javaslat:


    ... targy_szovege: $('#targy').val(), uzenet_szovege: $('#uzenet]').val(), ...
    Mutasd a teljes hozzászólást!
  • ... cimzett: $('#messageButton').attr('class'), ...

    A messageButton id-jű elem hol található:

    sendMessage id-jű elemvan, viszotn annak nem látszik a class attributuma.

    Lehet, hogy egy síma JS hibáb van. Firefox firebug vagy chrome F12 bomb lehet a segítséged.

    szerk.

    talán még egy:


    sendMessage.click(function(){ ...

    ezt a részt nem ártana egy


    $.(document).ready(function(){ });

    közé tenni, mert a az elemek még be sem töltődtek, amikor a js értelmezi a függvényt.
    Mutasd a teljes hozzászólást!
  • $.(document).ready(function(){

    });

    Ebben van az egész. Lehet van egy kis kavarodás akkor megint

    <div class="right_title"> <h2 class="right_title_text_left">Felhasználó adatlapjának megtekintése</h2> <input type="button" class="'.$user_id.'" id="messageButton" value="Privát üzenet küldése" /> </div>';
    Mutasd a teljes hozzászólást!
  • Mit keres ott a HTML-kód?
    Mutasd a teljes hozzászólást!
  • Az a body-ban van, csak az egyik hozzászóló kérdezte hogy hol van az egyik gomb vagy micsoda.
    Mutasd a teljes hozzászólást!
  • Az a body-ban van, csak az egyik hozzászóló kérdezte hogy hol van az egyik gomb vagy micsoda.


    Mivel még csak én szóltam hozzá a témádhoz, jó lenne, ha figyelmesebben olvasnád el a hozzászólásokat, hamár kérdezel.

    Ide teszem újra:


    ...
    cimzett: $('#messageButton').attr('class'),
    ...

    A messageButton id-jű elem hol található:

    sendMessage id-jű elemvan, viszotn annak nem látszik a class attributuma.

    Lehet, hogy egy síma JS hibáb van. Firefox firebug vagy chrome F12 bomb lehet a segítséged.

    Mutasd a teljes hozzászólást!
  • Azt hiszem megvan a hibád. Roszz a click funkció kötése, tehát el sem megy az oldaladról semmi szerintem.
    Próbáld így:

    <script type="text/javascript"> $(document).ready(function(){ $("#sendMessage").click(function() {...
    Mutasd a teljes hozzászólást!
  • A messageButton id-jű elem hol található:


    Amit az elöbb másoltam html-t, abban van ez benne.

    A táblába amugy rendesen menti el a dolgokat, azzal nincsen baj.
    Mutasd a teljes hozzászólást!
  • Arra a kérdésre nem válaszoltál hogy a data az tartalmaz e üzenetet?
    var result = $.trim(data); alert(data);
    egyébként meg

    resultDiv2.html(result).fadeIn('fast');

    és ha szépre is akarod

    var result = $.trim(data); MessageDiv.fadeOut('fast',function(){ resultDiv2.html(result).fadeIn('fast'); setTimeout(function(){ resultDiv2.fadeOut('fast'function(){ overlay.fadeOut('fast'); }); }, 3000)
    Mutasd a teljes hozzászólást!
  • Holnap megnézem. Amugy a data tartamaz mindent, adatbázisba rendesen elmenti.
    Mutasd a teljes hozzászólást!
  • Igen el menti, de az üzenet ami vissza jön az is data.
    Nem az volt a kérdés hogy az adatbázis meg kapja e, hanem az hogy a vissza jött üzenet miértnem jelenik meg. És ezt ba pár sorban ellenőrizheted, + érdemes át írni az előző hszem alapján.

    success: function(data){ //cseréld itt a data helyett msg var result = $.trim(data); //ás itt is. alert(msg);// ha kapsz a phptöl üzenetet akkor itt ki írja.

    De hogy egyszerübb legyen az egész, ne bonyolocsd a dolgot, adj egy idt a formnak aztán $('#formid').serialize();
    én így oldottam meg. A dátumot meg PHP oldalt ad hozzá ne pedig kliens oldalt.

    $('#submit_support_send').live('click',function(){ $.ajax({ type: "POST", url: "supportsend.php", data: $("#sendsupport").serialize(), success: function(meg){ var v = $.trim(meg); //alert(v); $('#support_valsz_keret').fadeOut("slow",function(){$(this).html(v).fadeIn('slow',function(){ setTimeout(function(){$('#supp').fadeOut('slow',function(){$(this).remove();$('#takar').remove();});}, 3000); }); }); } }); return false; //csak ajaxküldés html stop });
    Mutasd a teljes hozzászólást!
  • Szia, olyasmit szeretnél csinálni, hogy pl. elküldesz egy adatot a kliensről a PHP-nek a PHP feldolgozza és a végén pl. egy üzenetet visszaküld amit te meg megjelenítesz egy DIV-ben a kliensen?

    Mert én ilyeneket csinálok, azt nálam így működik. dataType: "json",

    PHP oldalon, ha a kliensről tömböt küldesz, akkor kell egy json_decode, ha sima szöveget küldesz a POST-ban, akkor nem kell.

    $php_array_jquery = json_decode($_POST["array_jquery"], true);

    Viszont, ha vissza választ, akarsz, akkor a PHP feldolgozás után kell egy json_encode

    $php_json = 'Success';

    echo json_encode($php_json, true);

    var formData = new FormData(); $.ajax({ type: "POST", dataType: "json", url: "recaptcha/recaptcha_request.php", data: formData, contentType: false, cache: false, processData: false, async: true, beforeSend: function(data) { var array_jquery = []; var object1 = {"array_jquery_test": array_jquery}; formData.append("array_jquery", JSON.stringify(object1)); }, });
    Mutasd a teljes hozzászólást!
  • Ha kicsit megnézed a kódját láthatod hogy szó sincs tömbről.
    Egyszerű post és vár rá egy választ.
    Mivel több helyen is le írta hogy az adatbázisa működik rendesen, így feltételezhető hogy az üzeneteket is ki írja a php. Bár én ezt egy sima echoval szoktam ellenőrizni de mindegy. A lényeg hogy a js nem irja neki ki az üzenetet. Ezt valószínű a nem megfelelő sorrendben összerakott animáció okozza.
    Mutasd a teljes hozzászólást!
  • Szerintem meg ez a gond: resultDiv2.html(result);

    Én sem vagyok egy ász, sőt egy amatőr, de ezt így kell:

    PHP: echo 'Üzenet elküldve';

    jQuery:

    $("#resultDiv2").html('<h2>' + data + '</h2>');

    A PHP - től sima szövegeket kell kapni, azt utána a kliensen kell designolni a dolgokat.
    Mutasd a teljes hozzászólást!
  • Jóreggelt

    Nem volt olyan változóm, hogy resultDiv2 nevü változóm. Mindenhol átírtam azt erre:$("#resultDiv2"), és így most kijön a div és az üzenet.

    Amit havasi írt, ott a data helyett result kellett.
    $("#resultDiv2").html('<h2>' + data + '</h2>');

    havasi, amit írtál json-os megoldást, azis tetszik, megpróbálom átírkálni olyanra. Köszi mindenkinek
    Mutasd a teljes hozzászólást!
  • használj firebugot, minden visszatérő adatot kitudsz vele tesztelni.
    A konzol része meg a rossz hivatkozásokat is kiírja.
    Mutasd a teljes hozzászólást!
  • Nagyon jó a JSON-ös dolog. Amúgy van az az async false meg true, arról fogalmam sem volt azt rájöttem, hogy ha pl. beleklikkelek egy inputba, aminél valamilyen jquery funkció van, és ugyanakkor egy időben elakarok indítani egy ajax json-t, akkor azt úgy lehet ha async: true, mert ha async: false, akkor az ajax json csak az input klikk funkció után megy el.
    Mutasd a teljes hozzászólást!
  • Akkor viszont ha nincs is olyan változod, feltehető hogy a többi sincs meg. ugyan is ez nem változó $("#resultDiv2")
    és ha megnézed a kódodat akkor látod hogy mindenhol változónak kezeled az id neveket csak valószinü akkor egyiknek sem hoztál létre változot.
    var result = $.trim(data); MessageDiv.fadeOut('fast'); resultDiv2.fadeIn('fast'); resultDiv2.html(result); setTimeout(function() { resultDiv2.fadeOut('fast'); overlay.fadeOut('fast'); }, 3000)
    Másrészt meg a a te esetedben a jeson raa nincs szükség. És helye sincs ebben az esetben. Persze tanulésnak érdemes neki állni, a tapasztalat szerzés nem árt.

    HAVASI.
    Nem jól tudod. Teljes formázást meglehet vele írni akkár egy komplet oldalt is le lehet másolni a html() ez nem keverendő össze a val() -al.

    html(); akár egy div tartalmát teljes formázásal vagy egy részét vagy az egész oldalt le másolhatod vele egy másik divbe vagy amit akarsz szürés után vissza is rakhatod a divbe stb...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd