2011-10-24 4 views
1

誰もこの光を放つことはできますか?jQuery経由でAJAX呼び出しをしようとすると、データがnullになります

私は以下のコードをAJAXとJSONによるフォーム提出ですが、スクリプトを見るとChromeにはuncaught type error cannot read property 'error' of nullというメッセージが表示されます。

私はJSONを初めて使ったので、間違っていると宣言したことがありますか?あなたのmailer.phpスクリプトで

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

} 


}); 
}; 
+0

ここにいくつかのコードがありますか? –

+0

私は@DaveNewtonと同じくらい迷っています。あなたは実際にajaxリクエストをどこで作成しますか? – rhololkeolke

+0

実際にサービスから返されるデータは何ですか? – David

答えて

0

、JSONなどのContent-Typeを設定してください:

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

有効なJSONを渡しているが、それはだから、jQueryの$のアヤックスはそうは思いません。ヘッダーがありません。 jQueryはヘッダなしで正常だったのですが、バージョン1.4以降で変更されました。

これで問題が解決しない場合は、スクリプトで有効なJSON応答が返されていることを確認してください。ここにJSONを投稿することができます。http://jsonlint.com/を確認またはチェックして確認します。

おっと...あなたの質問を誤読したようです...返されるJSONデータとは何ですか?

+0

私はあなたも間違っていると読んで、そのコードにPHPメーラを追加しようとします... –

+0

いいえ、喜び! JSONが出力しているものはどうすればわかりますか? –

+0

FireFoxを使用している場合は、コンソールでAJAXリクエストを表示するFireBugをダウンロードすることをおすすめします。http://getfirebug.com/ Chromeを使用している場合は、開発者ツールバーを使用してリモートリクエストを表示できます。 – McHerbie

関連する問題