簡體   English   中英

從AJAX調用成功返回'0'或0?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM