下記のようなAPIがあります。
このAPIはindex.htmlからもらったデータをsearch1.phpに投げ、JSON方式のコールバックを拾ってくるAPIです。
ただsearch1.phpはレスポンスが鈍く2秒ほど掛かるため、下記のapiのままでは、states200を返す前にデータを送ってしまい毎回nullを返してきます。
このapi.jsについて、「search1.phpがstatus200を返してからレスポンス成功時の処理をさせたい」というのが趣旨です。
if (send_data.readyState == 4 && send_data.status == 200){ }
という処置を嚙ませればいいのはおよそ見当がつくのですが、どう記載すればいいかがわかりません。(適当においた場所では上手くいきませんでした)
お手数ですが、下記のソースを修正いただけますでしょうか?
よろしくお願いいたします。
api.js
javascript
1 2$(function() { 3 // クリックイベントにajax処理を登録する 4 $('body').on('click', 'button[data-btn-type=ajax]', function(e) { 5 console.log('click btn'); 6 // リクエストの下準備 7 // リクエスト時に一緒に送るデータの作成 8 var send_data; 9 send_data = { 10 // テキストボックスの値を設定 11 user_type : $('input').val() 12 }; 13 console.log(send_data); 14 // WebAPIを叩く 15 $.ajax({ 16 // リクエストの内容 17 url: 'search1.php', 18 dataType: "json", 19 data: send_data, 20 // レスポンス成功時の処理 21 success: function(responce) { 22 if (responce.result === "OK") { 23 console.log(responce); 24 $('div[data-result=""]').html(JSON.stringify(responce)); 25 } else { 26 console.log(responce); 27 $('div[data-result=""]').html(JSON.stringify(responce)); 28 } 29 return false; 30 }, 31 // レスポンス失敗時の処理 32 error: function(XMLHttpRequest, textStatus, errorThrown) { 33 console.log(XMLHttpRequest); 34 console.log(textStatus); 35 console.log(errorThrown); 36 $('div[data-result=""]').html(JSON.stringify("データ取得中にエラーが発生しました。")); 37 return false; 38 } 39 }); 40 // フォーカスをテキストボックスに合わせる 41 $('input').focus(); 42 43 return false; 44 }); 45}); 46 47
尚、自分なりに置いてみてうまくいかなかったのは下記です。
// リクエストの内容 url: 'search1.php', dataType: "json", data: send_data,
と
success: function(responce)
の間にif (send_data.readyState == 4 && send_data.status == 200)を置くしかないと思うのですが。
そうするとカンマ区切りの中に無理やりIF文を入れることになるため動かないだろうと思いながらやったのですがやはり動きませんでした。
javascript
1 2 3$(function() { 4 // クリックイベントにajax処理を登録する 5 $('body').on('click', 'button[data-btn-type=ajax]', function(e) { 6 console.log('click btn'); 7 // リクエストの下準備 8 // リクエスト時に一緒に送るデータの作成 9 var send_data; 10 send_data = { 11 // テキストボックスの値を設定 12 user_type : $('input').val() 13 }; 14 console.log(send_data); 15 // WebAPIを叩く 16 $.ajax({ 17 // リクエストの内容 18 url: 'search1.php', 19 dataType: "json", 20 data: send_data, 21 // レスポンス成功時の処理 22 23//追加してみた 24 25if (send_data.readyState == 4 && send_data.status == 200){ 26 27 success: function(responce) { 28 if (responce.result === "OK") { 29 console.log(responce); 30 $('div[data-result=""]').html(JSON.stringify(responce)); 31 } else { 32 console.log(responce); 33 $('div[data-result=""]').html(JSON.stringify(responce)); 34 } 35 return false; 36 }, 37 // レスポンス失敗時の処理 38 error: function(XMLHttpRequest, textStatus, errorThrown) { 39 console.log(XMLHttpRequest); 40 console.log(textStatus); 41 console.log(errorThrown); 42 $('div[data-result=""]').html(JSON.stringify("データ取得中にエラーが発生しました。")); 43 return false; 44 } 45 }); 46 // フォーカスをテキストボックスに合わせる 47 $('input').focus(); 48 49 return false; 50 }); 51}); 52 53//追加してみた 54} 55 56
回答3件
あなたの回答
tips
プレビュー