2015-06-15 117 views
6

我正在使用jquery和ajax提交沒有頁面重載的表單,然後根據結果(無論是成功還是錯誤)我打印郵件兩個不同的divs。由於ajax中的成功和錯誤只會檢查客戶端/服務器連接,所以我在查詢成功時迴應PHP中的一些內容,並根據這些條件來處理如何處理消息。 jQuery的/ AJAX的部分看起來像這樣(我通常使用兩種不同的div但簡化的例子,我會用警報):檢查與jQuery如果結果/回聲從PHP開始「abc」

success: function (result) { 
    if (result == 'success') { 
     alert("Success!"); 
    } else { 
     alert("There was an error."); 
    } 
}, 

這工作完全,但我想,以提高其可用性。

現在的問題是:我可以在if (result ==部分使用類似str.match嗎?例如,如果運行查詢時出現了一些問題,我會在php echo "Error: >error description here<";中回顯。那麼我能否以某種方式在我的if條件中使用str.match(/^Error/)並回顯整個消息?

+2

可以肯定的,只是把'result'作爲一個普通的java字符串變量 –

+0

@NaguibIhab不知道jQuery與Java兼容 – Pinoniq

+1

@Naguib你不知道java和javascript是兩個完全獨立的語言嗎? –

回答

19

請勿爲此任務使用字符串匹配。使用HTTP響應代碼 - 這就是他們在那裏!在PHP中http_response_code功能是專爲這個確切的目的:

<?php 
if (/* error condition */) { 
    http_response_code(400); // "Bad request" response code 
    echo 'Invalid parameters'; 
} 
else { 
    echo 'Success'; // response code is 200 (OK) by default 
} 

然後你可以使用jQuery的donefail回調分別處理兩種情況:

$.ajax(url, params) 
    .done(function(response) { alert('all good: ' + response); }) 
    .fail(function(response) { alert('error: ' + response); }) 
+4

這應該是公認的答案,利用http比試圖狡猾的字符串匹配客戶端要好得多。 –

+0

我還沒有考慮過使用http響應代碼,因爲我對jquery的知識非常有限,所以我甚至沒有想過使用它們。我會更改接受的答案,因爲我更喜歡它,它具有更多實用性。我堅持成功和錯誤,雖然我不使用延期對象。此外,警報應該從響應改變爲response.responseText,否則返回[object Object]。 JSON.stringify(response)用於查看傳遞對象的全部內容。感謝調查它,以及如何在我的代碼中實現它,我學到了關於jquery的新東西,所以雙重道具。 – vove

+0

通過更改對response.responseText的響應,我的意思是針對錯誤部分,否則它會通過錯誤代碼傳遞整個響應等。 – vove

8

要檢查message開始與Error:你可以使用indexOf

if (result.indexOf('Error:') === 0) { 
    // Starts with `Error:` 
} 

indexOf將返回index0其中Error:result字符串中開始。

參考:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

indexOf()方法返回指定值的第一次出現的調用字符串對象中的索引,開始的fromIndex搜索。如果未找到該值,則返回-1。

+4

湯姆費內奇是正確的答案。這並不是不正確的,這只是解決了元問題。真正的問題是服務器返回200錯誤 – Pinoniq

+0

另一方面*有* web服務返回錯誤信息與'200 OK'狀態。 –

+0

請注意,操作是在故事的兩端控制。我是最後一個說這些web服務是好的人。有些東西在懸崖峭壁之間跳躍,我們告訴其他人不要這樣做 – Pinoniq

2

回答你的問題的'改善'部分我會做一些JSON。

PHP:

//此處是您的代碼,並創建一個關聯數組,像這樣:

if($errors){ 
    $data(
    'results'=>'errors', 
    'message'=>'it failed' 
); 
}else{ 
    $data(
    'results'=>'success', 
    'message'=>'it worked' 
); 
} 

echo json_encode($data); 

,然後你的js會不會停,如:

success: function (result) { 
    if (result.results == 'success') { 
     alert(result.message); 
    } else if (result.results == 'errors' { 
     alert(result.message); 
    } 
}, 

相關:http://www.dyn-web.com/tutorials/php-js/json/array.php#assoc