JQuery AJAX ошибка формы. Пустой строки - PullRequest
6 голосов
/ 26 августа 2011

У меня проблема при отправке контактной формы через Ajax в PHP-скрипт. Ранее я использовал функцию jQuery / Ajax, а также сценарий контакта, однако в этом случае процесс выполняется до запроса ajax, а затем возвращает ошибку: пустая строка.

$(document).ready(function(){
    jQuery("#sendmail").click(function(){
        var name = $("#name").val();
        var phone = $("#phone").val();
        var email = $("#email").val();
        var text = $("#message").val(); 

        //var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&text=' + text;
        var datastr ='name=' + name + '&phone=' + phone + '&email=' + email + '&text=' + text;
        $("#form-div").css("float", "left");
        $("#form-div").html("<p>Thank you for contacting Stillframe Photography.</p><p>Please wait for just a few moments while your enquiry is being sent.</p>");
        $("#form-div").fadeIn("slow");

        alert(datastr);

        jQuery.ajax({
            type: "POST",
            url: "contact.script.php",
            data: datastr,
            success: function(html){
            $("#response").fadeIn("slow");
            $("#response").html(html);
            //setTimeout('$("#response").fadeOut("slow")',2000);
            }
            ,error: function (XMLHttpRequest, textStatus, errorThrown) {
                                $("#response").html('there was an error');
                            console.log('error thrown');
                            console.log(errorThrown); 
            }
        });
    });
});

Вы можете увидеть страницу в действии на http://www.stillframe.com.au/test.php, и вы можете увидеть форму без носителя страницы по той же ссылке выше, но test2.php

Я также добавил сценарий без какого-либо другого jQuery к тому же URL-адресу, кроме test3.php, который публикует напрямую в контактный PHP-сценарий, чтобы подтвердить, что в этом сценарии нет ошибок.

решено: убран базовый тег href из головы, и скрипт теперь работает нормально.

Ответы [ 2 ]

8 голосов
/ 26 августа 2011

Вместо использования поле за полем используйте идентификатор ФОРМЫ <form id="myform"> и сериализовайте его.Попробуйте это:

$(document).ready(function(){
    jQuery("#sendmail").click(function(){
        jQuery.ajax({
            type: "POST",
            url: "contact.script.php",
            data: $('#myform').serialize(),
            cache: false,
            success: function(output) {
                $("#form-div").css("float", "left");
                $("#form-div").html("<p>Thank you for contacting Stillframe Photography.</p><p>Please wait for just a few moments while your enquiry is being sent.</p>");
                $("#form-div").fadeIn("slow");
                $("#response").html(output);
                $("#response").fadeIn("slow");
                //setTimeout('$("#response").fadeOut("slow")',2000);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                $("#response").html('there was an error');
                            console.log('error thrown');
                            console.log(errorThrown); 
            }
        });
    });
});
0 голосов
/ 26 августа 2011

Лучше использовать ajax с необработанным javascript по следующим причинам.

  1. Код очень простой и короткий.
  2. Вы никогда не закончите с ошибкой.
  3. Ваша цель - просто отправить переменные из javascript в php в правильном порядке, позаботимся о них, позвольте добавить пример кода ниже для вас.

    function insert(){
    if(window.XMLHttpRequest)
    {
        xmlhttp = new window.XMLHttpRequest();
    }
    else
    {
        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    }
    
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == '4' && xmlhttp.status == '200')
        {
            document.getElementById('msg').innerHTML = xmlhttp.responseText;    
        }
    }
    
    name = document.getElementById('insert').value;
    
    parameters = 'insert=' + name;
    
    xmlhttp.open('POST', 'day3.include.php', true);
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlhttp.send(parameters);
    

    }

В параметрах передайте все ваши переменные соответственно и создайте div # msg для отображения ответа от php.

Если у вас возникнет путаница, спросите меня на http://www.thetutlage.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...