Biến ajax thành php

Ajax đã nhanh chóng trở thành một phần quan trọng và phổ biến trong việc phát triển web và là một trong những mô hình thành công nhất từ ​​​​trước đến giờ. Ajax có một số phương thức thu gọn được sử dụng phổ biến như một biến.

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
5,
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
6 và
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
0. Chúng là những phương thức rất tiện lợi được sử dụng để tạo các yêu cầu Ajax chỉ với một vài dòng mã

Nhưng đôi khi chúng ta cần nhiều kiểm soát viên hơn cho mỗi lần chúng ta sử dụng Ajax. Ví dụ, chúng ta muốn chỉ rõ những hành động nào sẽ được thực hiện, sẽ xử lý như thế nào trong trường hợp một yêu cầu Ajax thất bại hay chúng ta cần thực hiện một yêu cầu Ajax nhưng chỉ cần xử lý kết quả của nó nếu kết quả này . Trong các trường hợp như thế, chúng ta có thể trông cậy vào một hàm khác được cung cấp bởi JQuery, đó là

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

Hàm
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

Hàm

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 của JQuery được sử dụng để thực hiện các yêu cầu HTTP bất đồng bộ. Nó đã được thêm vào thư viện từ rất lâu, tồn tại từ phiên bản 1. 0. Ba hàm
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
4
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
6 và
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
0 được đề cập ở trên có thể coi là một hàm
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 với những thiết lập sẵn có. Sau đây là cú pháp tổng hợp của hàm
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

________số 8

Tham số url là một chuỗi chứa URL mà bạn muốn sử dụng AJAX để thực hiện yêu cầu, trong khi đó tham số tùy chọn là một đối tượng thuần túy chứa các thiết lập cho yêu cầu AJAX đó

Ở dạng đầu tiên, phương thức này thực hiện một yêu cầu AJAX bằng cách sử dụng url tham số và các cài đặt được chỉ định trong các tùy chọn. Ở định dạng thứ hai, URL chỉ được xác định trong các tùy chọn tham số hoặc có thể bị lược bỏ trong trường hợp yêu cầu này được gửi đến đường dẫn chính của trang hiện tại

Danh sách các thiết lập được sử dụng bởi chức năng này sẽ được cập nhật trong phần tiếp theo. Nhưng làm danh sách này rất dài nên phần mô tả sẽ được nói ngắn gọn, trong trường hợp muốn nghiên cứu sâu hơn về ý nghĩa của chúng, bạn có thể tìm đến tài liệu chính thức của $. ajax[]

Danh sách các tham số
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
9

Có rất nhiều lựa chọn để bạn có thể thiết lập hàm

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 hoạt động theo ý muốn của mình. Trong danh sách dưới đây, bạn có thể tìm tên của tùy chọn và mô tả của chúng theo thứ tự của chữ cái

  • chấp nhận. Nội dung được gửi trong tiêu đề yêu cầu giúp máy chủ biết được kiểu phản hồi mà máy chủ sẽ chấp nhận khi trả về
  • không đồng bộ. Thiết lập giá trị
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    11 để thực hiện một yêu cầu đồng bộ
  • trước khi gửi. Một chức năng gọi lại yêu cầu trước có thể được sử dụng để điều chỉnh đối tượng
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    12 trước khi nó được gửi đi
  • bộ đệm. Thiết lập giá trị
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    11 để buộc trình duyệt không lưu bộ đệm của các trang được yêu cầu
  • hoàn thành. Một hàm được thực thi khi yêu cầu kết thúc [sau khi hàm gọi lại
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    14 và
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    15 được thực thi]
  • nội dung. An object of string or REGEX used to verify xem JQuery sẽ phân tích phản hồi như thế nào
  • nội dungType. Kiểu nội dung của dữ liệu được gửi lên máy chủ
  • định nghĩa bài văn. Một đối tượng được sử dụng làm ngữ cảnh [
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    16] của tất cả các hàm gọi lại liên quan đến Ajax
  • tên miền chéo. Thuộc tính thiết lập này là
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    17 để buộc thực hiện yêu cầu chéo giữa các tên miền [như JSONP] trên cùng một tên miền
  • dữ liệu. Dữ liệu được gửi lên máy chủ khi thực hiện một yêu cầu Ajax
  • bộ lọc dữ liệu. Một hàm được sử dụng để xử lý các phản hồi dữ liệu gốc của một XMLHttpRequest
  • loại dữ liệu. Kiểu dữ liệu mong muốn được trả về từ máy chủ
  • lỗi. Một hàm sẽ được gọi khi yêu cầu không thành công
  • toàn cầu. Use to setting view has call the functions processing ajax global global for this request or not
  • tiêu đề. Một đối tượng để viết thêm vào tiêu đề gửi lên máy chủ
  • ifModified. Thiết lập giá trị này là
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    17 nếu bạn muốn buộc JQuery nhận diện môi trường hiện tại là "cục bộ"
  • jsonp. Một chuỗi được sử dụng để ghi đè tên hàm gọi lại trong JSONP yêu cầu
  • jsonpGọi lại. Chỉ định tên hàm gọi lại cho một yêu cầu JSONP
  • loại kịch câm. A string only mime type type used to override lại kiểu mime của XHR
  • mật khẩu mở khóa. Mật khẩu được sử dụng với XMLHttpRequest để phản hồi một yêu cầu yêu cầu xác thực truy cập HTTP
  • xử lý dữ liệu. Đặt giá trị này là
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    11 nếu bạn không muốn dữ liệu được truyền vào thiết lập
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    00 sẽ được xử lý và biến thành một chuỗi kiểu truy vấn
  • tập lệnhCharset. Thiết lập thuộc tính bộ ký tự của tập lệnh thẻ được sử dụng cho một yêu cầu nhưng chỉ áp dụng khi vận chuyển tập lệnh [ví dụ:. yêu cầu chéo giữa các tên miền với jsonp] được sử dụng
  • mã trạng thái. Một đối tượng chứa các mã HTTP ở dạng số và các hàm được gọi khi phản hồi trả về có chứa một mã tương ứng
  • thành công. Một hàm được gọi khi yêu cầu thành công
  • hết giờ. The number was setting only default time out of a request
  • cổ truyền. Thiết lập giá trị
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    17 nếu bạn muốn tham số được tuần tự hóa theo kiểu truyền thống
  • loại hình. Kiểu yêu cầu muốn thực hiện, có thể là
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    02 hoặc
    $['#main-menu a'].click[function[event] {
       event.preventDefault[];
     
       $['#main'].load[this.href + ' #main *', function[responseText, status] {
          if [status === 'success'] {
             $['#notification-bar'].text['The page has been successfully loaded'];
          } else {
             $['#notification-bar'].text['An error occurred'];
          }
       }];
    }];
    
    03 …
  • url. Chuỗi chứa URL mà yêu cầu được gửi đến
  • tên tài khoản. Tên người dùng được sử dụng với XMLHttpRequest cho phản hồi của một yêu cầu yêu cầu xác thực truy cập HTTP
  • xhr. Một hàm gọi lại sử dụng để tạo một đối tượng XMLHttpRequest
  • xhrFields. Một đối tượng các khóa-giá trị được thiết lập cho đối tượng gốc XHR
Thực tế sử dụng của một vài thiết lập

Ở phần này, chúng ta sẽ xem xét hàm

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 và một vài thiết lập hoạt động như thế nào

Ví dụ đầu tiên của
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

Chúng ta sẽ bắt đầu với một bản demo đơn giản để so sánh giữa

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
0 và
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];

Cập nhật đoạn mã trên hàm

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1, ta sẽ nhận được mã đoạn sau

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

Ở đây bạn có thể thấy rằng dạng thứ nhất của

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 được sử dụng, URL để gửi yêu cầu được thiết lập với tham số đầu tiên và sau đó là đối tượng của thiết lập. Ở đây có 2 thiết lập được sử dụng trong danh sách trên đó là
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
14 và
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
15 để chỉ định sẽ làm gì trong trường hợp yêu cầu thành công hay thất bại

Lấy dữ liệu của một cuộc nói chuyện từ Tham gia. trong ứng dụng
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1

Ở ví dụ thứ hai, ta sẽ thảo luận về việc tạo một yêu cầu JSONP để lấy thông tin từ một dịch vụ đã tham gia. Trong. Đây là một trang web nơi những người đã tham gia một sự kiện nào đó có thể để lấy lại phản hồi cho sự kiện đó và ban tổ chức sự kiện đó. Đoạn mã bên dưới dây sẽ sử dụng

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 để lấy tiêu đề và mô tả của sự kiện cuộc trò chuyện về "Front-end hiện đại dưới cái nhìn của một nhà phát triển PHP"

Đoan mã để đạt được mục tiêu trên được viết như sau

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
0

Ở đoạn mã trên, một vài thuộc tính khác đã được sử dụng thêm. Đầu tiên, bạn có thể thấy rằng dạng thứ hai của

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1 đã được sử dụng, giúp bạn có thể chỉ định URL mà yêu cầu này gửi đến thông tin thuộc tính [
  $.ajax[url[, options]]
  $.ajax[[options]]
5]. Because API of Joined. id chấp nhận các yêu cầu JSONP, nên trong đoạn mã trên, kiểu yêu cầu được thiết lập thông qua thuộc tính
  $.ajax[url[, options]]
  $.ajax[[options]]
6. Sau đó, thuộc tính
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
00 được sử dụng để xác định kiểu của định dạng dữ liệu mà ta muốn lấy về từ máy chủ như được yêu cầu từ API. Thuộc tính
  $.ajax[url[, options]]
  $.ajax[[options]]
8 được đặt với giá trị
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
03 để thực hiện một yêu cầu GET

Các bạn có thể xem thử bản demo trực tiếp của đoạn mã được thực thi trên JSfiddle

Kết luận

Trong bài biết này, chúng tôi đã bàn luận về một hàm AJAX vô cùng mạnh mẽ từ JQuery là

$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
1. Nó cho phép bạn thực hiện các yêu cầu AJAX với rất nhiều thiết lập giúp bạn có thể điều khiển yêu cầu được gửi lên máy chủ và cách mà phản hồi của nó được xử lý. Nhờ có hàm này mà giờ đây bạn đã có một công cụ để có thể đáp ứng rất nhiều nhu cầu trong dự án của bạn trong trường hợp các hàm
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
0,
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
6 và
$['#main-menu a'].click[function[event] {
   event.preventDefault[];
 
   $['#main'].load[this.href + ' #main *', function[responseText, status] {
      if [status === 'success'] {
         $['#notification-bar'].text['The page has been successfully loaded'];
      } else {
         $['#notification-bar'].text['An error occurred'];
      }
   }];
}];
5 đơn thuần không thể trả lời hết

Chủ Đề