2016-05-17 113 views
1

當我將鼠標懸停在任何單詞上時總是顯示黑框。如果PHP代碼返回文本,它將顯示在黑色框中(它應該)。不過,如果文本未返回,我希望它返回一個錯誤函數,以便稍後可以更改黑盒的CSS,使其寬度爲0px而不是400pxajax如何從PHP文件返回錯誤消息

var x = ($(this).text()); 
$.ajax({ 
    type: 'POST', 
    url: 'process.php', 
    data: { text1: x }, 
    success: function(response){ 
     $('#tooltip').text(response); 
    } 
}); 
try 
{ 
    $db = new PDO('sqlite:ordbas.db'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $err) 
{ 
    echo "PDO fel $err"; 
} 

if (isset($_POST['text1'])) { 
    $text1 = $_POST['text1']; 
    $results = $db->prepare("SELECT forord FROM words WHERE sokord='$text1'"); 
    $results->execute(); 
    $row = $results->fetch(); 
    echo $row[0]; 
}  

正如你可能已經想通了沒有,我離開了一些非重要的代碼。我希望有人能夠理解並幫助我!謝謝!

+3

** **危險:你是**易受[SQL注入攻擊(HTTP:你需要[防守](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)。 – Quentin

+0

我知道,但在這一點上,我只是想要修復這部分代碼,謝謝! – Aplex

回答

2

這裏正是你如何能做到這一點:

的非常簡單的方法:

在你的PHP文件:

if ($query) { 
echo "success"; //anything on success 
} else { 
die(header("HTTP/1.0 404 Not Found"); //Throw an error on failure 
} 

AT您的jQuery阿賈克斯:

var x = ($(this).text()); 
$.ajax({ 
type: 'POST', 
url: 'process.php', 
data: { text1: x }, 
success:function(data) { 
alert(data); //=== Show Success Message== 
}, 
error:function(data){ 
alert("error occured"); //===Show Error Message==== 
} 
}); 
+0

非常感謝,這對我有用! – Aplex

+0

@複雜:沒問題..高興我可以幫助..! :D –

+0

好的開始。想知道我們是否可以指定某種字符串或某種類型的代碼來傳遞有關錯誤的詳細信息。 我們可以在PHP中回顯錯誤,但是如何將該消息傳遞給AJAX,同時觸發錯誤,而不是「成功」? – VisWebsoft

1

在你發現你可以把

header('Content-type: application/json'); 
echo json_encode(array('Error' => 'PDO fel "$err"')); 
+1

請注意'$ err'應該用雙引號進行評估,由php – felixyadomi

-1

與下面的代碼段,而不是嘗試:

var x = ($(this).text()); 
$.ajax({ 
    type: 'POST', 
    url: 'process.php', 
    data: { text1: x }, 
    success: function(response){ 
     $('#tooltip').text(response); 
    }, 
    error: function(error) { 
     console.log(error); 
    } 
}); 
+0

我們應該鼓勵.done()和.fail()而不是貶低成功/錯誤。 – VisWebsoft

0

使用PHP函數json_encode陣列上。然後,該數組將作爲JSON對象呈現給JavaScript(「響應」參數/參數)。

換句話說:

PHP:

// important to tell your browser what we will be sending 
header('Content-type: application/json; charset=utf-8'); 

... bla bla code ... 

// Check if this has gone right 
$success = $results->execute(); 
$row = $results->fetch(); 
$html = $row[0]; 

$result = [ 
    'success' => $success, 
    'html' => $html, 
]; 

print json_encode($result); 

JavaScript的:

// You may now use the shorthand 
$.post('process.php', { text1: x }, function(response) { 
    if (response.success) { 
     $('#tooltip').text(response.html); 
    } else { 
     ... show error ... 
    } 
}); 
1

$.ajaxfail回調被用於捕獲任何失敗的結果。

根據從服務器腳本返回的成功/失敗顯示/隱藏錯誤div。

HTML代碼:

 <div class="error"><div> 

CSS:

.error { 
     color: red; 
} 

JS代碼:

//hide error before ajax call 
$('.error').hide(); 
$.ajax(...) 
    .done:function(){ 
     ... 
    } 
    .fail: function(jqXHR, textStatus, errorThrown){ 
    $('.error').text(errorThrown); 
    $('.error').show(); 
    } 

注意:.success() & .error()方法從jquery 1.8中棄用,所以請避免使用它們。

棄用注意:該jqXHR.success(),jqXHR.error(),和jqXHR.complete()回調棄用的jQuery 1.8。要準備代碼以便最終刪除它們,請改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

0

首先,你需要讓瞭解JavaScript有服務器端

try 
{ 
    $db = new PDO('sqlite:ordbas.db'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $err) 
{ 
    // Set http header error 
    header('HTTP/1.0 500 Internal Server Error'); 
    // Return error message 
    die(json_encode(array('error' => 'PDO fel '.$err->getMessage()))); 
} 

一個錯誤,你需要處理錯誤而載入JSON

var x = ($(this).text()); 
$.ajax({ 
    type: 'POST', 
    url: 'process.php', 
    data: { text1: x } 
}) 

// This will be called on success 
.done(function(response){ 
    $('#tooltip').text(response); 
}) 

// This will be called on error 
.fail(function(response){ 
    // Error catched, do stuff 
    alert(response); 
}); 
0
$.ajax({ 
    url: "file_name.php", 
    method: "POST", 
    data: $("#form_id").serialize(), 
    success: function() { 
     alert("success"); //do something 
    }, 
    error: function() { 
     alert("doh!"); // do something else 
    } 
}); 

這是POST請求處理敏感表單數據(例如,您將綁定到UPDATE或INSERT查詢的數據)的示例。我包含了serialize()函數,以便處理來自後端表單的名稱字段。我還刪除了通過成功功能傳遞數據。在處理敏感數據或不計劃顯示的數據時,您不希望這樣做。想想我會在這裏發佈這裏,因爲當我搜索如何使用AJAX返回一個錯誤進行POST時,這個線程出現了。

說到返回一個錯誤,你會想做,而不是PHP現在再次更新。我也推薦閱讀5.4以上的文檔。

http_response_code(404); 
die(); 

我沖模()函數拋出,以確保沒有什麼事情發生,你提出申請後您的404

相關問題