[jQuery] wysyłanie formularza przez ajax

0

Witam,
Mój problem jest pewnie banalny dla wielu webmasterów z tego forum dlatego liczę na pewną odpowiedź :)
Mam taki oto kod:

function send_mail()
{

        $(".error").hide();
        var hasError = false;
        var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/;
        var emailToVal = "[email protected]";

        var emailTopic = $("#form_topic").val();
        if(emailTopic == '') {
            $("#form_topic").before('<div class="error">Podaj temat.</div>');
            hasError = true;
        }

        var emailFromVal = $("#form_mail").val();
        if(emailFromVal == '') {
            $("#form_mail").before('<div class="error">Podaj maila.</div>');
            hasError = true;
        } else if(!emailReg.test(emailFromVal)) {
            $("#form_mail").before('<div class="error">Blad w mailu.</div>');
            hasError = true;
        }

        var messageVal = $("#form_content").val();
        if(messageVal == '') {
            $("#form_content").before('<div class="error">Podaj wiadomosc.</div>');
            hasError = true;
        }

        if(hasError == false) {

            $.ajax({

              type: "POST",
              url: "../kontakt/senmail.php",
              data: "name=John&location=Boston",
              success: function(msg){
                alert( "Data Saved: " + msg);
                }
            });
        }

        return false;

}

sendmail.php:

<?php
    echo $_POST['name'];
    print_r($_POST);
?>

System sprawdza czy dane w formularzu są poprawne (działa ok) a jezeli nie ma błędu to powinien wysyłać ajaxem i dawać odpowiedź - to tylko test przed prawdziwym wywołaniem więc proszę nie szukać logiki tu ;)
Ale funkcja ajax nie działa nie wiem czemu. A skrypt żywcem prawie sciągnięty z http://docs.jquery.com/Ajax/jQuery.ajax

Jakieś sugestie? Co mam źle?
Wszelkie informacje podam w tempie natychmiastowym jeżeli będzie taka potrzeba :)
pozdrawiam i z góry dziękuję za odpowiedź

0

Firebug -> zakładka console i patrzysz czy w ogóle jest wykonywane zapytanie do serwera. Jeśli jest, zobaczysz dokładny adres/wysłane dane/odebrane dane. Sprawdź czy są poprawne.

0

Na moje oko to to wygląda jak deklaracja zmiennej, a nie wywołanie funkcji. Dodam że "oni" robią to tak: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype

0

Spróbuj może też w url'u podać całą ścieżkę, bezwzględną.

0

Debugowałem tak jak radziliście przez konsolę Firebuga i doszedłem do wniosku że nie umiał "złapać" funkcji implementowanej z zewnątrz.. mniejsza z tym ważne że dane są przesyłane już prawidłowo ale na serwerze nadal POST jest pusty obojętnie jak bym tego nie wysyłał.
Oto kod znów wysyłający posta:

$.ajax({

        type: "POST",
        url: "../kontakt/sendmail.php",
        data: "emailFrom: logan",
        success: function(data){
          alert( "Data Saved: " + data );
        }
});

Konsola pokazuje że te dane są prawidłowo przesłane (http://img120.imageshack.us/img120/9803/postiy4.jpg) ale po przesłaniu i zadziałaniu kodu w 'kontakt/sendmail.php':

<?php
     $mailFrom = $_POST['emailFrom'];   
     echo 'email from: '.$mailFrom;
?>

nic nie jest wyświetlane, tzn cały POST jest PUSTY :(
nie wiem co jest nie tak ..

0

url: "../kontakt/sendmail.php",

wstaw tam adres internetowy a nie ścieżkę do pliku

0
madmike napisał(a)

url: "../kontakt/sendmail.php",

wstaw tam adres internetowy a nie ścieżkę do pliku

To nie jest problemem gdyż on normalnie interpretuje tą ścieżkę i dochodzi do pliku, bo inaczej nic by nie wyświetlał a jednak obsługuje kod z 'sendmail.php' ale dlaczego POST nie jest prawidłowo przesyłany?

0

A nie możesz tego po prostu zrobić na GET?
Na przykład tą prostą biblioteką:

// Get the HTTP Object
function getHTTPObject(){
   if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}   

// Change the value of the outputText field
function setOutput(){
   if(httpObject.readyState == 4){
      document.getElementById('myBody').innerHTML = httpObject.responseText;
    busyStatus = false;
   }
}

// Implement business logic
function loadSite(namesite){
   httpObject = getHTTPObject();
   if (httpObject != null) {
      httpObject.open("GET", namesite, true);
      httpObject.send(null);
      httpObject.onreadystatechange = setOutput;
   }
}

var httpObject = null;

Walimy tak:

loadSite('../kontakt/sendmail.php?mailfrom='+document.getElementById('mailfrom').value+'&costam=1');

I odpowiedź ładuje się nam w elemencie [divie, spanie] który ma ID myBody.
Pobiera dane z inputa o ID mailfrom.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0