2011-07-01 9 views
0

ユーザーがデータ文字列を入力したときに新しいレコードでMySQL DBを更新するphpスクリプトへのajax呼び出しがあります。 PHPの一部はif/elseであり、エントリが重複しているかどうかをチェックします。データベースを更新するのを止めることができますが、「そのレコードはすでに存在します」という「エラー」メッセージを返信する方法はわかりません。ここにjqueryがあります: [スクリプト] $(function()私はPHPスクリプトからその$error変数を吐くことができるようにしたいに送り返さなければjquery ajaxの結果メッセージ

[php] 
include('db.php'); 
if(isset($_POST['entry'])) 
{ 
$date_created = date('Y-m-d H:i:s'); 
$entry = $_POST['entry']; 
$query = "SELECT COUNT(*) AS count FROM table WHERE entry = '$entry'"; 
$result = mysql_query($query); 
$row = mysql_fetch_array($result); 
if ($row['count'] == 0) { 
mysql_query("insert into table (entry,date_created) values  ('$entry','$date_created')"); 
$sql_in= mysql_query("SELECT entry,id FROM table order by id desc"); 
$r=mysql_fetch_array($sql_in); 
$newentry=$r['newentry']; 
$id=$r['id']; 
?> 
<li class="entry bar<?php echo $id; ?>"> 
<div class="thebro"><span><?php echo $newentry; ?></span></div> 
<div class="hr"></div> 
<div class="utility-left"><span class="share"><a href="#" title="Share">share</a></span> | <span class="time">days ago</span></div> 
<div class="utility-right"><span class="comments">COMMENTS</span> | <span class="like">LIKE</span></div> 
</li> 
<?php 
} else { 
$error = "Sorry, that record already exists"; 
} 

} 
[/php] 

:{

$(".entry_button").click(function() 
{ 
    var element = $(this); 
    var boxval = $("#entry").val(); 
    var dataString = 'entry='+ boxval; 
     if(boxval=='') { 
      alert("Please Enter Some Text"); 
     } else { 

      $("#flash").show(); 
      $("#flash").fadeIn(400).html('<img src="images/loading.gif" align="absmiddle">&nbsp;<span class="loading">Broifying It...</span>'); 
      $.ajax({ 
        type: "POST", 
        url: "update_data.php", 
        data: dataString, 
        cache: false, 
        success: function(html){ 
         $("ol#update").prepend(html); 
         $("ol#update li").slideDown("slow"); 
         document.getElementById('entry').value=''; 
         $("#flash").hide(); 
        } 

      }); 
     } 
     return false; 
    }); 
}); 
[/script] 

、ここでは、DB(update_data.php)を更新する私のPHPスクリプトですajaxの呼び出しと私のHTMLの要素に表示されます。私はアヤックスのエラーメッセージの駄目を探ってきたが、彼らはすべてheade rエラー、検証エラーメッセージではありません。上記のjqueryチャンクをやり直してjsonデータとして送信しない限り、json_encodeも使用していません。

素晴らしいアイデアです!

答えて

0

ちょうどあなたのphpfileと、使用中にそれをエコー:PHPでエラーをエコーすべてが

+0

$( '#のajaxCatchbox')HTML(ajaxRequest.responseText)。 – AlienWebguy

0

カントーjqueryの中でこだま...知らん同等のthatsあなたのajaxrequestオブジェクトからresponsetextが拾っ

document.getElementById('ajaxCatchbox').innerHTML = ajaxRequest.responseText; 

と出口。次に、あなたの成功の最初に:私はそれはあなたがいる限り、彼らはすべて申し訳ありません「で始まるとしてさまざまなエラーメッセージのさまざまなを作成することができますので、部分文字列のアプローチを使用することをお勧め

if(ajaxRequest.responseText.substring(0, 5) === 'Sorry') { 
     alert(ajaxRequest.responseText); 
     return; 
    } 

:機能、このような何かを行います"デバッグに便利です。

1

PHPでエラーが発生した場合は、jquery ajaxオブジェクトのエラーメソッドで処理し、responseTextをマークするエラーを含む通常のHTTP 200応答を送信することで '偽造'しないようにします。

PHPからHTTP 500が返された場合、 'responseText'はajaxエラーハンドラによって取得されません。エラーハンドラは、XHRオブジェクト、ステータス 'error'、およびエラーメッセージ 'Internal Server Error'を受け取ります。

私は..

header('HTTP/1.1 500 My Custom Error Message'); 

エラーメッセージを操作しようとしたしかし、それは動作しませんでした。

は何の仕事をしたことはこれです:

function errorHandler($number, $message, $file, $line) { 
    $data = array(
     'message' => $message, 
     'line' => $line, 
     'file' => $file, 
     'trace' => debug_backtrace() 
    ); 

    header('Debug: ' . json_encode($data, true)); 
} 

これは、余分なヘッダにカスタムの詳細は、HTTP 500を返すようにPHPを取得します。 。Ajaxのエラーハンドラからカスタム詳細情報にアクセスするには

$.ajax({ 
    success: function(response) { 
     // ... 
    }, 
    error: function(XHR, status, errorThrown) { 
     $.each(XHR.getAllResponseHeaders().split('\n'), function(i, header) { 
      if (header.substr(0, 7) == 'Debug: ') { 
       var error = JSON.parse(header.substr(7)); 
       console.log(error); 
      } 
     }); 
    } 
}); 
関連する問題