jQuery AJAX 表单错误。空字符串

Posted

技术标签:

【中文标题】jQuery AJAX 表单错误。空字符串【英文标题】:jQuery AJAX form error. Empty string 【发布时间】:2011-11-04 02:54:54 【问题描述】:

当我通过 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 标记,脚本现在可以正常工作了。

【问题讨论】:

您是否尝试过让您的 URL 包含数据,并删除“数据”行? url: 'contact.script.php?name=' + name + '&phone=' + phone + '&email=' + email + '&text=' + text, 我在 test2.php 上没有收到错误,它似乎在工作? 谢谢詹姆斯。在测试 2 中,您收到了“感谢您与我们联系”的回复还是收到了“出现错误”的回复? 这真的让我很困惑。我已将 URL 参数更改为上面更新的 Johnny。一样的回应。但是,当我收到发送给我的电子邮件时,似乎有些人一直在尝试使用该表单,因此表明该表单正在按预期工作。当我尝试 FF 和 Chrome 时,它​​不起作用,抛出错误并且没有发送电子邮件。 只是为了澄清 test3.php 将工作,因为它绕过 Ajax 请求并直接发布到 PHP 脚本。 【参考方案1】:

不要逐个字段地使用,而是使用 FORM ID &lt;form id="myform"&gt; 并对其进行序列化。试试这个:

$(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); 
            
        );
    );
);

【讨论】:

感谢您的帮助。该脚本产生了许多异常错误。【参考方案2】:

最好将 ajax 与原始 javascript 一起使用,原因如下。

    代码非常简单和简短。 您永远不会因任何错误而结束。

    您的目标只是将变量从 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@

【讨论】:

-1。你会“永远”以错误结束吗?真的吗?我相信我能想出办法。你的答案是纯粹的偏好,它并没有以他编程的方式解决 OP 的问题。

以上是关于jQuery AJAX 表单错误。空字符串的主要内容,如果未能解决你的问题,请参考以下文章

$.ajax传递json格式参数,某属性为null,取值为空字符串的问题。

JQuery val() 返回空字符串

选择 jquery,空字符串作为选项

统一修改表单参数(表单提交的空字符串统一转null)

如何检查 django 表单数据是不是为 ​​None、''(空字符串)或 False

检查jQuery中的空字符串[重复]