2012-01-14 17 views
0

新しいステータスをデータベースに挿入するためのフォームを作成しました。私のシナリオはjQuery AJAX postメソッドを使用してページをリロードする必要がないようにジョブを実行します。その後、メソッドが完了すると、別の2つのAjaxメソッドが呼び出され、アプリケーションのタイムラインがリフレッシュされます(これらの2つのメソッドは、Twitter APIを呼び出してページのタイムラインをリフレッシュするPHPスクリプトを実行します)。 update_statusメソッドは成功しますが、別の2つのメソッドを実行できません。アドバイスの人?私は本当にあなたのフィードバックに感謝します。 - おそらく、NULL値私はupdate_timelineresult[i]['user']が問題を引き起こしていることを想像Jquery AJAXが成功するといくつかのメソッドを実行できないのはなぜですか?

$(document).ready(function(){ 

    $(function() { 
     $("#update_status_btn").click(function() { 
      var user_id = $("#update_status #user_id").val(); 
      var status = $("#update_status #status").val(); 
      var dataString = 'user_id='+ user_id + '&status=' + status; 

       update_status('profile/update_status', dataString); 
      return false; 
       }); 
    }); 




}); 

function update_status(method_url, dataString) 
{ 
     $.ajax({ 
      type: 'POST', 
      url: method_url, 
      data: dataString, 
      cache: false, 
      success: function() { 
       //the following methods won't executed :-(
       update_timeline('profile/get_user_timeline', '#user_timeline ul'); 
       update_timeline('profile/get_home_timeline', '#home_timeline ul'); 
      } 
     }); 
} 

function update_timeline(method_url, target) 
{ 
     //get home timeline 
     $.ajax({ 
      type: 'GET', 
      url: method_url, 
      dataType: 'json', 
      cache: false, 
      success: function(result) { 
      $(target).empty(); 
      for(i=0;i<result.length;i++){ 
       $(target).append('<li><article><img src="'+ result[i]['user']['profile_image_url'] +'"><a href="">'+ result[i]['user']['screen_name'] + '</a>'+ linkify(result[i]['text']) +'</li></article>'); 
      } 
      } 
     }); 
} 


function linkify(data) 
{ 
    var param = data.replace(/(^|\s)@(\w+)/g, '[email protected]<a href="http://www.twitter.com/$2" target="_blank">$2</a>'); 
    var param2 = param.replace(/(^|\s)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>'); 
    return param2;  
} 
+0

'#status'の内容は何ですか? 'URIEncode'ではありません。これは、特定の文字が存在すると問題になる可能性があります。 – lonesomeday

+0

URLが200のステータスを返していますか? ajax呼び出しが呼び出しが成功したと思わない場合、successオプションで定義された関数は呼び出されません。 –

+0

@ scott.korinうーん..私はこのAJAXのものにはかなり新しいです、私はそれをチェックしませんでした。しかし私は自分のデータベースを調べて手動でチェックし、新しい行を挿入するのに成功します。また、私のtwitterのステータスを更新します。私は2つの他のメソッドと一緒に成功コールバック関数で警告を出します。アラートが表示されます。メソッドが成功したことを意味しますか?私のタイムラインがすぐにリフレッシュされないため、メソッドへの他のメソッドは実行されていないようです。一つのことは、 'update_timeline'には何も問題がありません。これまでのところ動作しています(コードラインをスクリプトに60秒ごとに呼び出すようにしています:-) – under5hell

答えて

0

が、これは私のコードです。あなたはjavascriptデバッガを使用していますか?結果オブジェクトの値が何であるかを示すはずです。

また、ajaxメソッドでエラーコールバックを定義し、jqXhr(jquery http xml request)オブジェクトのresponseTextを調べることができます。これにはサーバーから受信した応答が含まれています。明らかにjsonオブジェクトを期待していますが、サーバーエラーが発生した場合、jqueryが何をすべきか分からないHTMLを受け取っている可能性があります。

$.ajax({ 
type: 'Post' 
url: method_url, 
    data: dataString, 
cache: false, 
success: function() {}, 
error: function (jqHxr, statusText) { 
    //jqXhr.responseText holds the response sent from the server 
       } 
+0

はい、私はChrome用javascriptデバッガを使っています。実際には、 'update_timeline'関数に何も問題はありません。' $(document).ready'関数の直後に呼び出すようにしました。それでも私のタイムラインを完全に更新することができます。私は 'update_status'関数に何か問題があると仮定しました。率直に言って、私はこのAJAXのことは初めてです.JQueryのAJAXのドキュメントを読んでいます。 'success:'コールバックメソッドは、ある関数の配列を取り出すことができますが、どうやってそれを行うのか分かりません。ドキュメントには、この問題に関する例は含まれていません。別の提案がありますか? – under5hell

+0

私の答えはいくつかのコードで更新されました。 – Jason

関連する問題