[英]Return '0' or 0 on success from AJAX call?
我有一系列嵌套的AJAX調用,用於驗證正在提交的表單的每個元素。 每個都檢查由調用的PHP文件創建的data
變量的結果。 如果PHP例程不成功,則程序echoes
由AJAX例程,這又在警告框中呈現捕獲的錯誤信息為用戶看到,這樣的形式可以根據需要進行修正,然后重新提交。 如果PHP例程成功,我echo
0並調用下一個AJAX驗證腳本。 只有在所有表單元素成功驗證后,才會處理表單。
我的問題與我們親愛的朋友!=
運算符和!==
運算符有關,但是關於運算性能的效率(我理解它們的運行方式的差異)。 目前,例程的結構如下:
在JQuery / AJAX中:
$.get('data_check.php', { id: $('#id').val() }, function(data) {
if (data != 0) {
alert(data);
} else {
[...next AJAX call...]
在data_check.php的末尾(以及由父AJAX例程調用的所有此類PHP例程):
if (!$success) {
echo $error_message;
exit;
} else {
echo 0;
exit;
}
這有效。 但是,我知道PHP文件中的echo
命令產生一個由AJAX例程接收的字符串值,因此當使用data != 0
計算接收到的data
變量時,會發生類型強制。
我可以修改當前的例程:
(1)回顯'0'
而不是0
(在PHP中,這將消除PHP(???)的類型轉換,但仍將依賴於AJAX中的類型強制),或者:
(2)使用data !== '0'
評估data !== '0'
(在AJAX中,這將消除類型強制,但仍然依賴於PHP(???)的類型轉換),或者:
(3)做上述兩種情況(最應該絕對消除類型強制)。
但是這些方法中哪些 - 如果有的話 - 是最有效的? 我可能會在這里拆分,但我更傾向於使用一種技術,它采用解釋器處理步驟最少的數量,並且可能有一種更有效的方式來返回成功值而不是我設置它的方式,或者我列出的3種可能的替代品中的任何一種。 請讓我知道編寫此代碼的不同方法(包括我未列出的方法)是最有效的處理方式。 非常感謝!
我想你在這里混淆了。 完全沒有PHP的強制,它的工作就是簡單地輸出0.除非你使用JSON,否則它無法告訴接收JavaScript它是0或'0' - 處理清楚否定你想要做的任何重鑄優化。
所以,JS總會收到一個字符串。 知道這一點,使用適當的比較來避免客戶端的強制!== '0'
話雖如此,這是過早優化的典型例子。 如果您要執行一百萬次操作,您可能能夠記錄一分鍾的性能提升。 另一方面,如果你要發送一百萬個AJAX請求,這樣的收益可能是你需要擔心的最后一件事。
**php**
$responseMessage = array('success' => true, 'message' => 'Your validation error/errors');
header('Content-Type: application/json');
echo json_encode($responseMessage);
exit();
**javascript**
$.get('URI', function(data)
{
if (data.success != undefined)
{
if (data.success)
{
//show successful message
}
else
{
$(form).find('#form-error-container').append(data.message);
//handle the validation errors
}
}
else
{
//handle via ajaxError/.fail or here :(
}
});
要添加更多參數,只需展開數組;
$responseMessage = array('success'=>true, 'errors'=>array('username'=>'Too many characters'));
**js**
data.errors.forEach( //your logic );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.