2010-04-07 16 views
5

Lời chào,
Tôi đang cố gắng khám phá một cách thích hợp để gửi các lỗi bị bắt hoặc ngoại lệ logic nghiệp vụ cho máy khách trong hệ thống Ajax-PHP. Trong trường hợp của tôi, trình duyệt cần phản ứng khác nhau tùy thuộc vào việc yêu cầu có thành công hay không. Tuy nhiên trong tất cả các ví dụ tôi đã tìm thấy, chỉ có một chuỗi đơn giản được báo cáo lại cho trình duyệt trong cả hai trường hợp. Ví dụ:Cơ chế thích hợp để gửi lỗi PHP tới máy khách

if (something worked) 
    echo "Success!"; 
else 
    echo "ERROR: that failed"; 

Vì vậy, khi trình duyệt được trở lại phản ứng Ajax, cách duy nhất để biết nếu một lỗi xảy ra sẽ được phân tích chuỗi (tìm kiếm 'lỗi' có lẽ). Điều này có vẻ khó khăn.

Có cách nào tốt hơn/thích hợp để gửi lại phản hồi Ajax & thông báo cho trình duyệt lỗi không?
Cảm ơn bạn.

+0

Ngôn ngữ đánh dấu eXtensible? Ví dụ: –

Trả lời

1

tôi thường gửi lại một phản ứng JSON như thế này:

$response = array('status' => 'error', 'message' => 'an unknown error occured'); 

if(some_process()) { 
    $response['status'] = 'success'; 
    $response['message'] = 'Everything went better than expected.'; 
} else { 
    $response['message'] = "Couldn't reticulate splines."; 
} 

die(json_encode($response)); 

Vì vậy, tôi có thể kiểm tra tình trạng của response.status trong JavaScript của tôi và tìm kiếm giá trị là "những thành công" hay "lỗi" và hiển thị response.message một cách thích hợp .

+0

Đó là yên tâm để biết không có một cơ chế dứt khoát tôi chỉ đơn giản là bỏ qua.Tôi đã mong đợi một cái gì đó giống như một mã trạng thái http là câu trả lời dứt khoát. Tuy nhiên có vẻ như việc thêm trạng thái và tin nhắn vào phản hồi json là một lựa chọn phổ biến. Và kể từ khi phản hồi cơ sở dữ liệu của tôi sẽ được mã hóa json anyway, tôi sẽ đi tuyến đường này. TY –

4

Bạn có thể gửi lại mã trạng thái HTTP 500 (Lỗi máy chủ nội bộ), sau đó bao gồm thông báo lỗi trong nội dung. Thư viện khách hàng AJAX của bạn sau đó sẽ xử lý nó như là một lỗi (và gọi một cuộc gọi lại thích hợp, vv) mà không cần phải tìm chuỗi trong phản hồi.

+0

+1 jQuery chấp nhận các hàm gọi lại khác nhau cho các yêu cầu thành công và thất bại trong các phương thức Ajax của nó. – selfawaresoup

1

hiển thị cho người dùng trạng thái của những gì đang diễn ra và những gì đã xảy ra là rất quan trọng.

Tôi muốn cấu trúc câu trả lời ajax của bạn, bạn nên xem xét định dạng json.

if (something worked) 
    echo '{ "error": 0 }'; 
else 
    echo '{ "error": 1 }'; 

Khi bạn đặt chân vào thế giới json, bạn sẽ có thể gửi kết quả có cấu trúc hơn. Ví dụ:

if (something worked) 
    echo '{ "error": 0 }'; 
else 
    echo '{ "error": 1, "code": 889, "desc": "Something bad happened" }'; 

Khi bạn nhận được kết quả này trong javascript, bạn có thể biến nó thành đối tượng và thực hiện hành động tùy thuộc vào các khóa khác nhau.

Các json2.js thư viện sẽ giúp bạn chuyển đổi đầu ra của bạn thành một đối tượng

1

Gửi các tiêu đề http thích hợp nên làm các trick và nói với kịch bản ajax của bạn để thực hiện gọi lại ngay. Mỗi khung javascript tôi biết có một lời gọi thành công và lỗi cho các yêu cầu XHR của nó.

header('HTTP/1.1 500 Internal Server Error');

1

Bạn có thể gửi lại một đối tượng JSON có chứa một thông điệp mã lỗi tùy chỉnh và lỗi mà bạn có thể hoặc là xử lý hoặc hiển thị trực tiếp đến người dùng của bạn:

{ 
    "response": 10, 
    "message": "The database didn't work or something" 
} 

Nó sẽ làm việc cho sự thành công cũng như:

{ 
    "response": 1, 
    "message": "It worked! Yippee!" 
} 
Các vấn đề liên quan