2011-08-15 16 views
27

JQUERY、AJAX、PHPから頭を悩ませています。PHPがJSONをJQUERY AJAX CALLに返す

フォームの要素を処理して電子メールを送信できますが、私はAJAXへの返却を処理していません。私はいつもerror:セレクタをアクティブにしています。私が返すJSONのリストを表示しようとすると、明らかに間違っている情報が表示されます。想定さJSONデータ

readyState=4 
setRequestHeader=function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this} 
getAllResponseHeaders=function(){return s===2?n:null} 
getResponseHeader=function (a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c} 
overrideMimeType=function (a){s||(d.mimeType=a);return this} 
etc etc 

の上場はずJSONリターン

<?php 

touch('phpTouch.txt'); 
// process email 
$email=1; 
if ($email) { 
    $value = array('return' => 1, 'msg1' => 'Message sent OK, we will be in touch ASAP'); 
} else { 
    $value = array('return' => 0, 'msg1' => 'Message Failed, please try later'); 
} 
$output = $json->encode($value); 
echo $output; 

?> 

JavascriptとAJAX

function submitForm(evt) { 
    $('#msgid').html('<h1>Submitting Form (External Routine)</h1>'); 
    if ($('#formEnquiry').valid()) { 
     $("#msgid").append("<h1>(Outside Ready) VALIDATED send to PHP</h1>"); 
      $.ajax({ 
      url: "ContactFormProcess3.php", 
      type: "POST", 
      data: $('#formEnquiry').serialize(), 
      dataType: "json", 
      success: function (data) { 
       alert("SUCCESS:"); 
       for(var key in data) { 
        $('#msgid').append(key); 
        $('#msgid').append('=' + data[key] + '<br />'); 
       } 
      }, 
      error: function (data) { 
       alert("ERROR: "); 
       for(var key in data) { 
        $('#msgid').append(key); 
        $('#msgid').append('=' + data[key] + '<br />'); 
       } 
      } 
     }); 
    } else { 
     $('#msgid').append('<h1>(Outside Ready) NOT VALIDATED</h1>'); 
    } 
    evt.preventDefault(); 
}; 

PHP誰も私が作った愚かな何かの間違いにと助言することができた場合、私は最も感謝しています。

+0

ここで '$ json'は定義されていますか?あなたは 'json_encode();'を使うことができます – Prisoner

+0

どのバージョンのjQueryを使っていますか? – marc

+0

@marcバージョン1.6.2、Google CDN – mcl

答えて

78

あなたは、PHPでこの方法JSONを返すことができます:JSONオブジェクトを返すとAjaxの成功方法でそれを解析するために、エコーカント我々のユーザーのreturn文なし

header('Content-Type: application/json'); 
echo json_encode(array('foo' => 'bar')); 
+0

チップをありがとう。私は試してみましたが、私は同じ結果を得ています。なぜ 'error:'が常に実行されているのですか? – mcl

+0

これはあなたのPHPスクリプトがエラーを返すことを意味する – arnaud576875

+0

多くのありがとう。私は今なぜ、あなたが正しいのかを理解しています。今すぐ固定して作業する – mcl