Jquery [object Object]而不是文本

时间:2015-03-06 13:39:00

标签: javascript jquery

我有这个代码,它工作得很好。问题是,不是在div中显示文本消息,而是打印以下消息:[object Object] ..我使用以下函数浏览Web并跟踪线程:

console.log()我可以在控制台中看到这条消息(感谢firebug),但我在div中看不到它......

我错过了什么?

代码:

$(document).ready(function() {
    $("#form_mail").validate({
        rules: {
            'email': {
                required: true,
            },
            'oggetto': {
                required: true,
            },
            'msg': {
                required: true,
            },
        },
        submitHandler: function() {
            $.ajax({
                type: 'POST',
                url: 'mail.php',
                data: $('#form_mail').serialize(),
                complete: function(html) {
                    console.log(html);
                    $('#message').show().text(html).fadeOut(3000, "linear");
                }
            });
        }
    });
});

4 个答案:

答案 0 :(得分:1)

您的问题是,您使用的是complete方法,而不是success。你在那里得到一个物体的原因是非常明显的。 From documentation

  

complete:Function(jqXHR jqXHR,String textStatus)一个函数   在请求完成时调用(成功和错误之后)   回调被执行)。该函数传递了两个参数:The   jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个字符串   对请求的状态进行分类

看到了吗?好。

为了使其按预期工作,请将complete替换为success

 success: function(html) {
            console.log(html);
            $('#message').show().text(html).fadeOut(3000, "linear");
 }

答案 1 :(得分:0)

尝试添加属性" dataType" =" html"或" dataType" =" text"到ajax选项。

$.ajax({
                type: 'POST',
                url: 'mail.php',
                data: $('#form_mail').serialize(),
                dataType: "html",
                complete: function(html) {
                    console.log(html);
                    $('#message').show().text(html).fadeOut(3000, "linear");
                }
            });

答案 2 :(得分:0)

jquery返回一个xhr对象,而不是纯文本。

要访问文本响应,您需要调用responseText。见下文

$.ajax({
  type: 'POST',
  url: 'mail.php',
  dataType: "text"
  data: $('#form_mail').serialize(),
  complete: function(res) {
    $('#message').show().text(res.responseText).fadeOut(3000, "linear");
  }
});

答案 3 :(得分:-1)

我宁愿在这里使用,因为成功被jQuery 1.8中的done取代。当它失败时和成功时完成处理,这样你就可以在完成时处理这两种情况,而不仅仅是成功。正如bad_boy指出的那样,来自文档:

  

complete:Function(jqXHR jqXHR,String textStatus)一个函数   在请求完成时调用(成功和错误之后)   回调被执行)。该函数传递了两个参数:The   jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个字符串   对请求的状态进行分类

$(document).ready(function() {
    $("#form_mail").validate({
        rules: {
            'email': {
                required: true,
            },
            'oggetto': {
                required: true,
            },
            'msg': {
                required: true,
            },
        },
        submitHandler: function() {
            $.ajax({
                type: 'POST',
                url: 'mail.php',
                data: $('#form_mail').serialize()
            }).done(function(data){
                 $('#message').show().text(data).fadeOut(3000, "linear");
            });
        }
    });
});