2011-08-19 34 views
12

Tôi đang bận làm một ứng dụng web, cần phải xử lý rất nhiều lỗi và nội dung để tôi tạo một hộp thoại jquery ui. Hiển thị các lỗi này. Các lỗi được lấy ra bởi cơ sở dữ liệu. ví dụ:jQuery xóa một biến URL

khi tên tôi/mật khẩu không đúng khi tôi cố gắng để đăng nhập tôi được chuyển đến

http://domain.com/?do=login&e=login-incorrect 

ứng dụng sau đó biết anh có để tìm kiếm các lỗi đăng nhập-không chính xác trong cơ sở dữ liệu và hiển thị cho người dùng. Bây giờ tất cả điều này rất tốt. Ngoại trừ khi vì lý do nào đó người dùng sẽ tải lại trang cụ thể này, anh ta sẽ nhận được thông báo lỗi một lần nữa trong khi anh ta không cần phải nhận được nó.

vì vậy kế hoạch của tôi là ràng buộc một số loại chức năng cho sự kiện close của hộp thoại và chuyển hướng người dùng đến cùng một lỗi trang mà không có thông số e trong URL. Làm thế nào tôi có thể đạt được điều này. Tôi đã thử mọi thứ. Nhưng không thể làm cho nó hoạt động được.

gì tôi đã cố gắng:

bassicly cố gắng nhận được tất cả các thông số tốt và khâu những cùng nhau trừ các tham số e. như vậy:

$ERROR = $_GET['e']; 
$DO = $_GET['do']; 
$P = $_GET['p']; 
$C = $_GET['c']; 
$T = $_GET['t']; 
$ACTION = $_GET['action']; 

// URL WITHOUT ERRORS 
$needP = ""; 
$needACTION = ""; 
$needDO = ""; 
if($P != ""){ 
    $needP = "p=".$P."&"; 
} 
if($DO != ""){ 
    $needDO = "do=".$DO."&"; 
} 
if($ACTION != ""){ 
    $needACTION = "action=".$ACTION.""; 
} 
$NOERRORURL = $BASEURL."?".$needP.$needDO.$needACTION; 

Nhưng nó không hoạt động và xấu xí của nó

+0

Hiện chúng tôi những gì bạn đã cố gắng. –

+0

bài đăng được chỉnh sửa ... – sn0ep

Trả lời

25
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, ""); 

Điều này sẽ xóa tất cả các trường hợp tham số e khỏi chuỗi truy vấn và làm mới trang.

+0

Rất cám ơn đây chỉ là những gì tôi cần! Cảm ơn nhiều! – sn0ep

+0

'example.com? E = trứng & f = ếch' ->' example.com? & F = ếch'. Các '? &' Là một chút whack. –

+0

'if (location.search.length) { location.href = location.href.substring (0, location.href.indexOf ('?')) + '?' + ('&' + Location.search.substring (1)) thay thế (/ & e = ([^ &] $ | [^ &] *)/i, ''). Chuỗi con (1); } ' –

3

Một cách để làm điều đó:

location.search = location.search.replace(/&e=[^&;]*/,''); 

Đó sẽ tải lại trang web như bạn đề cập, mà không có sự 'e' tham số


Tuy nhiên, cách tốt hơn là sử dụng hàm băm thay thế như sau: http://domain.com/?do=login#login-incorrect. Sau đó, bạn có thể kiểm tra các hash khi tải trang, và mở hộp thoại báo lỗi của bạn nếu login-incorrect băm được tìm thấy:

if (location.hash.indexOf('login-incorrect') != -1) { 
    // Open your jQuery UI dialog here 
} 

Và nếu họ đóng hộp thoại, bạn chỉ có thể xóa băm mà không cần phải làm mới trang :

$('.closeErrorDialog').click(function(){ 
    location.hash = ''; 
}); 

Nếu bạn đang đi để có rất nhiều trong số này, tôi khuyên bạn nên Ben Alman của jQuery hashchange event hoặc càng đầy đủ tính năng BBQ plugin mà làm cho cuộc sống của bạn dễ dàng hơn nhiều khi bạn đang làm việc với băm.

+0

Công trình này khá gọn gàng, nhưng nếu người dùng gặp lỗi trên trang chỉ mục thì sao? do đó, trên url sau. 'http: //domain.com/? e = login-error' người dùng sẽ liên tục được looped thông qua lỗi đó ngay cả khi anh ta đóng hộp thoại – sn0ep

+0

Nhưng woukld này có nghĩa là tôi phải thực hiện 20+ trong số này bằng tay. đúng? – sn0ep

+1

@Toby: trang không bao giờ được tải lại, vì vậy không thể có bất kỳ vòng lặp nào. Và tại sao bạn cần phải thực hiện hơn 20 trong số này? –