2011-07-01 92 views
0

我有一個ajax調用一個php腳本,當用戶提交一個數據字符串作爲條目時,用一個新記錄更新我的MySQL數據庫。部分PHP是if/else,用於檢查條目是否重複。我可以停止重複更新數據庫,但我不知道如何發回「錯誤」消息,說「該記錄已存在」...這是我的jQuery: [腳本] $(function() {jquery ajax結果消息

$(".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] 

,這裏是我的PHP腳本,更新數據庫(update_data.php):

[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] 

我希望能夠吐在PHP腳本,$error變量被送回ajax調用並顯示在HTML中的元素中我已經用ajax錯誤信息搜索了一些垃圾信息,但是它們都與heade有關r錯誤,而不是驗證錯誤消息。我也沒有使用json_encode,除非有人想重做上面的jquery塊,以便將它作爲json數據發送。

任何想法都會很棒!

回答

0

只是回聲它在你的phpfile及用途:

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

從ajaxrequest對象這個responseText拿起一切多數民衆贊成迴盪......說不上jQuery中相當於壽

+0

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

0

回聲錯誤的PHP和出口。然後,在你成功的開始:函數,做這樣的事情:

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

我建議使用的子方法,因爲它允許,只要他們都開始用「對不起,您可以創建各種不同的錯誤信息」。用於調試。

1

如果在PHP中產生錯誤,我希望它通過jquery ajax對象的錯誤方法來處理,而不是通過發送標準responseText的錯誤發送正常的HTTP 200響應來「僞造」它。

從PHP返回HTTP 500時,ajax錯誤處理程序不捕獲'responseText'。錯誤處理程序收到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)); 
} 

這將讓PHP在額外頭部返回HTTP 500,與您的自定義細節。

要從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); 
      } 
     }); 
    } 
});