• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ajaxで画像の削除)

Ajaxで画像削除の試行錯誤、通信失敗の解決方法を教えてください

このQ&Aのポイント
  • Ajaxを使用して画像の削除を試みていますが、通信が失敗してしまいます。通信失敗の原因と解決方法を教えてください。
  • 試行錯誤の結果、画像の削除処理やDBの更新は正常に行われていることが分かりましたが、Ajaxの通信が失敗してしまいます。通信失敗の原因と解決方法について教えてください。
  • Ajaxを使って画像の削除処理を行っていますが、通信が失敗してしまいます。通信失敗の原因と解決方法について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

success : function(data){ if(data.id){ alert(data.id); $("#tblh img#image"+data.id).attr("src","/images/noimage.gif"); } の「alert(data.id);」は実行されて、送信したidがアラート表示されていますでしょうか? (1) また、ブラウザから直接 http://***.***.***/images/noimage.gif で「noimage.gif」画像が表示されますか?(2) $("#tblh img#image"+data.id).css("display", "none"); とするとどうなりますでしょうか。(3) chromeの「F12」開発ツールやFireFoxの「FireBug」などは利用していますか。 利用していれば、実際に「<img>」タグの「src=」属性が変更されているか確認できるはずです。 src属性が変更されているにもかかわらず画像が変わらないのか、 そもそもsrc属性が変更されないのか・・・ success : のfunctionでエラーなどが起きてないかも開発ツールで確認してみてください。 .htaccessの設定は多分問題ないと思います。 RewriteEngine on RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico) RewriteRule ^(.*)$ /index.php/$1 [L]

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

追加質問のJQueryの部分ですが・・・ FireFoxとChromeでは問題なく動作しました。 IEは最初動かなかったのですが、何度か試しているうちに動作し始めました??(原因不明 JQueryの1.6で「attr」の問題があったみたいなので、 今利用しているバージョンが分かりませんが、 バージョンを変えてみてはいかがでしょう。 1.7.2が最新のようです。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

eccschool
質問者

補足

ご返答ありがとうございます。 JQueryのバージョンは1.72です。 xampp環境下で試しているんですが、firefox、chromeともにダメな状況です。 これはxamppが悪いんですかね?更新ボタンを押すと削除されていることが確認できnoimageに変わります。 でも意味ないですよね・・・。 それにしてもIEは相変わらずのダメブラウザですね・・・。呆れます。 フォルダパスの指定が悪いんですかね?? ディレクトリの配置は htdocs |---application(controllers,models,view,configなど) |---js(javascriptファイル) |--images(画像ファイル) |--css(cssファイル) としています。 /images/noimage.gif の指定方法ではダメなんですかね? htaccessで RewriteCond $1 !^(index\.php|images|css|js|robots\.txt) としています。おかしいですか?? いや~何がなんだか???? すみませんがよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

error : function(){ alert("通信に失敗しました。"); } の個所を以下に書き換えて実行するとどのようなメッセージが出力されますか。 error : function(data){ alert(data.responseText); }

eccschool
質問者

補足

ご回答ありがとうございました。 ご指摘の変更を行ったところ、PHPの側のエラーと見られる内容が表示されました。 そこを修正したら 成功側に判定されました。 試行錯誤しているうちにPHPの処理も乱れたみたいです。 あと、最後の success : function(data){ if(data.id != ""){ alert("true"+data.id); $("#tblh img#image"+data.id).attr("src","/images/noimage.gif"); } }, 部分でnoimage.gifに切り替えようとしていますが、 うまくいきません。 tableにid="tblh" としてそのtdのimgタグにid="image1"からid="image20"まで割り振っています。 すみませんが、この部分について教えてください。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

application/logs/ディレクトリにあるログを確認してみてください。 おそらく、PHPの ERROR , WARNING , NOTICE などが Jsonデータ文字列の前に出力されていると思われます。 Ajaxではなく、ブラウザから通常のPOSTをしてみて、ブラウザで出力を確認してみるのも良いと思います。 <form method="POST" action="/test/delete_image"> <input type="text" name="id" value="10"> <input type="submit" value="submit"> </form> また、通信エラーとは関係ありませんが、下記の様なコードの方が 2度 「input 」インスタンスの「 post() 」メソッドをコールすることなく効率が良いし見た目も良いと思います。(^0^ if(! $id = $this->input->post("id")){ return false; } //画像の削除とDBの画像名称を更新 $arr=array('id' => $id); $this->output->set_content_type('application/json'); $this->output->set_output(json_encode($arr));

eccschool
質問者

補足

エラーログを設定してみたんですが、favicon.icoが無いというエラー以外出ていません。 構文的には間違っていないんですかね? 初心者で探り探りやっていて自信がありません。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

echo json_encode($arr); の個所を以下のように書き換えるとどうでしょうか。 $this->output->set_content_type('application/json'); $this->output->set_output(json_encode($arr)); return TRUE; こちらも参考にしてみてください。 http://www.ci-guide.info/practical/core/output/

参考URL:
http://www.ci-guide.info/
eccschool
質問者

補足

ご返答ありがとうございます。 ご教授いただいたとおり、修正したのですが、いまだに 「alert("通信に失敗しました。");」となります。 どこが悪いのかまったく分からないです・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jqueryの$.ajaxで送信できない

    はじめまして。 jquery初心者ですが、$.ajax使ってのPOST送信ができません、php側でログを取ってみてもアクセスすらしません。若干お手上げなので、分かる方がいたら、アドバイスを頂けませんか? 【やりたいこと】 formにデータを入力(html)し → jqueryを使ってpost送信(js) → 認証(php) → 結果をhtmlに表示させたい。 【ソース】 -a.html- <form method="post" id="signin" action=""> <input id="email" name="email" value="" title="email" class="required" tabindex="4" type="text"> <input id="posturl" type="hidden" name="posturl" value="a.php"> <input id="signin_submit" value="Sign in" tabindex="6" type="submit"> </form> -------- -a.js- $(function() { $("form#signin").submit(function() { var email = $("input#email").val(); var postFile = $("input#posturl").val(); var data = {email:email}; $.ajax({ type: "POST", url: postFile, data: data, timeout: 1000, error: function(){ // エラー時 alert('Error'); }, success: function(data) { if(data != ''){ alert(data.result); } else { alert('no data'); } } }); }); }); -------- -a.php- (他略、とりあえず適当に出力してみる) echo "{'status': false,}"; exit; -------- よろしくお願いします。m_m

  • ajaxでPHPにPOST送信して結果データを受信しようとしていますがうまくいきません。

    セレクトボックスの値を受け取りPOST送信 <HTML側> function SelValue(){ var x = $('#category1').val(); $.ajax({ type: "POST", url: "category.php", data: {"prm":x}, dataType: "json", success: function(data, status){ alert(data.address1 + data.address2); }, error: function(XMLHttpRequest, status, errorThrown){ alert("エラーが発生しました!"); } }); } 以下category.php if(!$_POST) header("Location: input.php"); $CATEGORY2 = array( 1 =>array( 1 => "a", 2 => "b", 3 => "c", ), 2 => array( 1 => "d", 2 => "e", 3 => "f", ), 3 => array( 1 => "g", 2 => "h", 3 => "i", ), ); $ary = array(); if($_POST["prm"]){ for($i=1;$i<=3;$i++){ foreach($CATEGORY2[$i] as $key => $value){ if($key == $_POST["prm"]) $ary = $CATEGORY2[$i]; } } } json_encode($ary); としています。 PHPにPOSTしたデータも確認できないし jsonデータを表示できないです。 どのようにしたらいいかわかりません。 ajax初心者でわからないことだらけです。 教えてください。

    • ベストアンサー
    • AJAX
  • phpに値が送られない

    PHP側に値が送られなくて困ってます!! どなたか助けて頂けないでしょうか $(function() { $('a') .click(function() { var id = this.id; alert(id); $.ajax({ type: 'POST', dataType:'json', url:'editor_text.php', data:{ item:id }, success:function(data) { alert(data); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }); });

    • ベストアンサー
    • AJAX
  • AJAX+PHPでセレクトボックスの連動

    AJAX+PHPでセレクトボックスの連動をしようとしています。 function SelAjax(){ var x = $('#category1').val(); $.ajax({ type: "POST", url: "category.php", data: {"prm":x}, dataType: "json", success: function(data, status){ $.each(data,function(i) { $('#category2').append($('<option>').attr({ value: i }).text(data[i])); }); }, error: function(XMLHttpRequest, status, errorThrown){ alert("エラーが発生しました!"); } }); } としています。 PHP側で $CATEGORY2 = array( 1 => array( 1 => "a", 2 => "b", 3 => "c", 4 => "d", ), 2 => array( 1 => "e", 2 => "f", 3 => "g", 4 => "h", ), 3 => array( 1 => "i", 2 => "j", 3 => "k", 4 => "l", ), 4 => array( 1 => "m", 2 => "n", 3 => "o", 4 => "p", ), 5 => array( 1 => "q", 2 => "r", ), 6 => array( 1 => "s", 2 => "t", 3 => "u", ), ); $ary = array(); if($_POST["prm"]){ for($i=1;$i<=6;$i++){ if($i ==$_POST["prm"] ) $ary = $CATEGORY2[$i]; } } echo json_encode($ary); としています。 一回目に1番目のセレクトボックスを選択してAjaxでPOSTし2つ目のセレクトボックスを生成できました。 しかし、2回目として1番目のセレクトボックスを選択した際に、1回目にPHPから受け取った配列に積みあがってしまいます。 どのように対処すればいいかわかりません。 教えてください。

    • ベストアンサー
    • AJAX
  • jquery,ajaxによるphp通信でnull

    初めまして。 現在jqueryを勉強中の学生です。 いろいろなサイトを参考にしつつ、試しににjquery・ajaxを使ったphpとの通信を試みているのですが、文字列のやりとりがうまくいきません。 数字ではうまくいくのですが、文字になるとalertの部分でnullと返されてしまいます。 アドバイス等頂ければと思います。 よろしくお願いいたします。 以下部分的ではありますがコードを示します。 (jqueryはjquery-1.11.1.min.jsを使用) [js] $.ajax({ type: "POST", url: "step1.php", data: send_data, success: function(receive_data) { var parseAr = JSON.parse(receive_data); alert(parseAr[0]['name']); }, error: function(XMLHttpRequest, textStatus, errorThrown) {alert('Error: ' + errorThrown); } }); return false; [php側] <?php if(isset($_POST['name'])) { $result = array(); $result[] = array('name'=>'織田', 'age'=>'33'); $result[] = array('name'=>'織田', 'age'=>'33'); echo json_encode($result); } else { echo json_encode('The parameter of "name" is not found.'); } exit; ?>

  • Codelgniterのコンストラクタ記述方法

    PHP5 で Codelgniter (Ver2.0.3-1) を使用してコンストラクタを書く方法につきお尋ねします。 ある参考書で Codelgniter の使用法を学習していますが、その本のフォーム処理のためのコントローラーの例文として下記の記述があります(一部要約)。 Class Form extends Controller { function Form(){ parent:: Controller(); $this->load->helper('url'); $this->load->library('form_validation'); $this->form_validation->set_rules('name', '名前', required); } } ところがこのコンストラクタは PHP4 形式で記述しているとの注記が付いています。 このコンストラクタを PHP5 形式で Codelgniter (Ver2.0.3-1) を使用して書くにはどのようにすれば良いでしょうか? ネスト形式で次のようにすれば良いですか? Class Form extends CI_Controller { function Form(){ public function __construct(){ parent:: construct(); } $this->load->helper('url');   中略 } }

    • ベストアンサー
    • PHP
  • codeigniterのsessionについて

    codeigniterで、管理画面を作っていて、今認証画面に取り掛かってますが、sessionが引き継がれません。 ※以下のコードは、session以外は省いてます。 controller側のtop.phpで、 class Top extends MY_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); } public function index() { $superuser = array( 'superuser' => 'yes' ); $this->session->set_userdata($superuser); redirect('show'); } $this->load->view('admin/top', $page); } とし、controller側のshow.phpで、 class Show extends MY_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); } public function index() { var_dump($this->session->userdata('superuser')); $this->load->view('admin/show'); } } としてますが、show.phpで、var_dumpがfalseを返してしまい、sessionが引き継がれません。 ご教授下さい。

    • 締切済み
    • PHP
  • formのボタンをsubmitしたときにアラート

    javascript で、formのボタンをsubmitしたときに アラートが出るようにしたいと思います。 下記のように作ってみましたが、うまく動きません。 どのようにすれば動くでしょうか? ご教示いただきたくお願いいたします。 <script type="text/javascript"> function(){ $('form1').submit(function(){ $.ajax({ type: 'POST', data: postData, url: 'buy.php', success: function(data){alert("購入できました");} error: function(){alert('購入できませんでした。再度お試しください');} }); return false; }); } </script> <form name="form1" id="form1" method="POST" name="form1" value="form1" action="buy.php"> <input type="hidden" name="id" value="100" /> <input type="hidden" name="name" value="高橋" /> <input type="submit" value="Save"> <form/>

  • prototype.jsのAjax.Request

    javascript部分 function loadDataFile(intvalue){  new Ajax.Request("uploader.php",{   method:'post',   onComplete:function(httpObj){    test(intvalue);   }  }); } function test(intvalue){  // 画像表示のための処理 } htmlのform部分 <form action="sample.php" method="post" name="syouhintouroku" enctype="multipart/form-data">  <input type="file" id="img_path1" name="img1" value="" />  <input type="button" value="画像を確認" onclick="loadDataFile(引数);" /> </form> 今は、ざっとこのような感じで書いています。 「画像を確認」ボタンが押されると画像がアップロードされるようにしたいのですが画像が送られていません。 ちなみに、uploader.phpというのはPOST送信されてきたファイルをサーバー側のファイルに保存する処理をしています。通常のformのsubmitでは画像はちゃんとアップロードされるのでPHPファイルのほうに問題はないと思われます。 もしかして、Ajax.Requestでは画像が送れないとか書き方が違うとかいうことなんでしょうか? よろしくお願いします。

    • ベストアンサー
    • AJAX
  • 2つのjavascriptを組み合わせたい

    フォームメール用の2つのjavascriptがあります。 ●2重送信防止とデータ送信後指定ページへ遷移するjavascript ●テキストボックスが空欄だった時にアラートを表示するjavascript の2つです。 この2つを組み合わせようとしたのですが、うまく動きません。 ご指導いただきたくお願いいたします。 *************************************************** 【●2重送信防止とデータ送信後指定ページへ遷移するjavascript】【動きます】 送信ボタン押下後、2重送信を防止しながら、データ送信後は「location.href = "finish.html"」でfinish.htmlを表示します。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { // HTML送信キャンセル event.preventDefault(); //フォーム要素取得 var $form = $(this); // 送信ボタンを取得 // (後で使う: 二重送信防止) var $button = $form.find('button'); // 送信 $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, // 送信前 beforeSend: function(xhr, settings) { // ボタン無効二重送信防止 $button.attr('disabled', true); }, // 応答後 complete: function(xhr, textStatus) { // ボタン有効再送信許可 $button.attr('disabled', false); }, // 通信成功処理 success: function(result, textStatus, xhr) { // 入力値初期化 $form[0].reset(); location.href = "finish.html"; }, // 通信失敗処理 error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信A"> </form> *************************************************** 【●テキストボックスが空欄だった時にアラートを表示するjavascript】【動きます】 テキストボックスが空欄だったらアラートを表示します。 <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form> *************************************************** 【上記の2つを組み合わせてみました。】【動きません】 テキストボックスが空欄だったらアラートを表示しながら2重ボタン排除&finish.htmlに遷移というものです。 【結果】 「問題なく動くjavascript」2つを単純に組み合わせただけなのですが、 finish.htmlに遷移せずinsert.phpが表示されます。ご指導宜しくお願いします。 <script type="text/javascript" src="js/jquery.js"></script> <script> jQuery(function($) { $('#form1').submit(function(event) { event.preventDefault(); var $form = $(this); var $button = $form.find('button'); $.ajax({ url: $form.attr('action'), type: $form.attr('method'), data: $form.serialize() + '&delay=1', timeout: 10000, beforeSend: function(xhr, settings) { $button.attr('disabled', true); }, complete: function(xhr, textStatus) { $button.attr('disabled', false); }, success: function(result, textStatus, xhr) { $form[0].reset(); location.href = "finish.html"; }, error: function(xhr, textStatus, error) { alert('retry');} }); }); }); </script> <script> function check3() {   var tel3 = document.form1.tel.value;   var fax3 = document.form1.fax.value;   var isValid = true;   if (!tel3) {     alert("電話未入力");     isValid = false;   }   if (!fax3) {     alert("FAX未入力");     isValid = false;   }   if (!isValid) {     return;   }   document.form1.submit(); } </script> <form name="form1" id="form1" method="POST" name="form1" action="insert.php"> <input type="text" name="tel" value="" /> <input type="text" name="fax" value="" /> <input type="submit" value="送信B" onclick="check3();"> </form>

このQ&Aのポイント
  • 高校1年生のわたしは、医者になって難病の研究をしたいという夢を持っています。しかし、数学や理科の成績が伸びずに悩んでいます。でも、夢を諦めずに医学部に入るための努力は惜しまず、やる気はあります。
  • 成績は偏差値68の高校で下位層に位置していますが、今からでも医学部に間に合うチャンスはありますか?また、勉強法についてのアドバイスをいただきたいです。
  • 医者になりたいという夢を持つ高校1年生のわたしは、難病を抱える人々を助けたいという思いから、医学の道を志しました。しかし、数学や理科の苦手さから、医学部に入ることができるのか心配です。それでも、夢を諦めずに努力を惜しまず、医者になるための勉強法を知りたいと考えています。
回答を見る

専門家に質問してみよう