尝试通过jQuery进行AJAX调用时,数据为null

时间:2011-10-24 17:08:44

标签: jquery ajax json

任何人都可以对这个问题有所了解吗?

我有以下代码,这是通过AJAX和JSON提交的表单,但是当我查看脚本时,我在Chrome中收到uncaught type error cannot read property 'error' of null条消息。

我对JSON完全不熟悉,所以也许我说错了什么?

$(document).ready(function(){
    $('form #form_ajax').hide();
    $('#submit').click(function(e){
    e.preventDefault();

    var valid = '';
    var required =  ' is required';
    var name = $('form #name').val();
    var email = $('form #email').val();
    var message = $('form #message').val();

    if (name == '' || name.length <= 2) {
        valid = '<p>Your name' + required + '</p>';
    }

    if (!email.match(/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i)) {
        valid += '<p>Your email' + required + '</p>';
    }

    if (message == '' || message.length <= 5) {
     valid += '<p>A message' + required + '</p>';
    }

    if (valid != '') {
        $('form #form_ajax').removeClass().addClass('error').html('<p>Please correct the errors below.</p>' + valid).fadeIn('fast');
    } else {

        $('form #form_ajax').removeClass().addClass('processing').html('Processing…').fadeIn('fast');

        var formData = $('form').serialize();
        submitForm(formData);

    }

    });

});

function submitForm(formData) { 
$.ajax({
type: 'POST',
url: 'mailer.php',
data: formData,
dataType: 'json',
cache: false,
timeout: 7000,
success: function(data) { 


    $("form #form_ajax").removeClass().addClass((data.error === true) ? "error" : "success")

/////HERE'S WHERE I GET THE UNCAUGHT EXCEPTION ERROR////

        .html(data.msg).fadeIn('fast');


    if ($('form #form_ajax').hasClass('success')) { setTimeout($('form #form_ajax').fadeOut('fast'), 5000);

    }

},

error: function(XMLHttpRequest, textStatus, errorThrown) { 

    $('form #form_ajax').removeClass().addClass('error')
            .html('<p>There was an ' + errorThrown + 'error due to a ' + textStatus + ' condition.</p>').fadeIn('fast');

},

complete: function(XMLHttpRequest, status) { 

    $('form')[0].reset();

}


});
};

1 个答案:

答案 0 :(得分:0)

在mailer.php脚本中,请务必将Content-Type设置为JSON:

// Send as JSON
header("Content-Type: application/json", true);

虽然你传递的是有效的JSON,但jQuery的$ .ajax并不这么认为,因为它缺少标题。 jQuery曾经很好没有标题,但它在版本~1.4中已经改变了。

如果这不能解决您的问题,请确保您的脚本返回有效的JSON响应。您可以在此处发布JSON,我将查看或查看http://jsonlint.com/以进行验证。

哎呀.. 看起来我误读了你的问题......返回的JSON数据是什么?