2011-07-01 5 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 스크립트입니다 아약스 호출 및 HTML 내 요소에 표시됩니다. 나는 아약스 오류 메시지의 헛소리를 봤어하지만 그들은 모두 heade 함께 할 r 오류가 아니라 유효성 검증 오류 메시지. 나는 누군가 json_encode를 사용하지 않고있다. 위의 jquery 청크를 재실행하여 json 데이터로 보내지 않는다면 말이다.

어떤 아이디어라도 좋을 것입니다!

답변

0

은 그냥 phpfile이라고 사용에 에코 : PHP에서

+0

$ ('#의 ajaxCatchbox') HTML (ajaxRequest.responseText을). – AlienWebguy

0

에코 그래도 몰라 ... 당신의 ajaxrequest 개체에서에서 responseText 모든 것을 집어

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

는 에코 이잖아 오류를 JQuery와의 동등하고 출구. 그런 다음, 당신의 성공의 시작 부분에 : 나는 당신이 한 그들은 모두 죄송합니다 "로 시작으로 서로 다른 다양한 오류 메시지를 생성 할 수 있기 때문에 문자열의 접근 방식을 사용하는 것이 좋습니다

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

: 기능 같은 것을 할 ". 디버깅에 유용합니다.

1

PHP에서 오류가 발생하는 경우 jquery ajax 객체의 오류 메서드에서 처리해야하며 responseText를 표시하는 일부 오류가있는 일반 HTTP 200 응답을 보내면 '가짜'는 아닙니다.

PHP에서 HTTP 500이 반환되면 'responseText'는 ajax 오류 처리기에서 캡처하지 않습니다. 오류 처리기는 XHR 개체, '오류'상태 및 '내부 서버 오류'오류 메시지를받습니다.

나는 오류 메시지를 조작하려고

..

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({ 
    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); 
      } 
     }); 
    } 
});