채우기 자바스크립트/Jquery with Json data 클릭 시 상자 선택 옵션
저는 아직 Jquery를 배우고 있는데 제가 맡은 일이 조금 혼란스럽습니다.
간단한 일인 것 같네요...클릭할 때 옵션으로 채울 상자가 있습니다.누군가가 실제로 목록을 보기 위해 요청할 때만 페이지 로드에 해당 목록을 채우지 않았으면 합니다.또한 한 번만 채워야 합니다.누군가 목록을 확장할 때마다 요청이 나가는 것을 정말 원하지 않습니다.
Select(선택) 요소에 함수 호출이 있을 것으로 예상됩니다.
<select id="usersList" name="usersList" onclick="getUsers()">
그런 다음 자바스크립트 getUsers() 함수로 내 Json GetUsers() ActionMethod로 전화를 걸어 목록을 가져오도록 합니다.어떻게?
뭔가...?
function getUsers()
{
getJSON("/Users/GetUsers", null, function (data){}
}
아니면 JQuery?
$("usersList").click(
$.getJSON("/Users/GetUsers", null, function (data) {}
)
이 게시물을 봤음을 말씀드려야겠습니다: selectlist가 로드되면 JQuery의 json data로 채우기 (문서가 아닌)
하지만 저는 이 모든 것을 정리하는 데 도움이 필요합니다.미리 감사드립니다!
여기 선택 상자를 채우기 위해 사용할 자바스크립트가 있습니다.
$.getJSON("/Users/GetUsers", null, function(data) {
$("#UsersList option").remove(); // Remove all <option> child tags.
$.each(data.Users, function(index, item) { // Iterates through a collection
$("#UsersList").append( // Append an object to the inside of the select box
$("<option></option>") // Yes you can do this.
.text(item.Description)
.val(item.Id)
);
});
});
사용자가 선택 상자를 클릭할 때가 아니라 페이지 로드에서 이를 트리거하는 것을 권장합니다. jQuery AJAX는 기본적으로 비동기식이므로 선택 상자가 비어 있는 상태가 되어 사용자에게 큰 혼란을 줄 수 있습니다.
이것이 당신의 질문의 정도였습니까 아니면 MVC측에서도 도움이 필요했습니까?ASP를 사용하는 경우.Net MVC에는 실제로 JsonResult의 특정 결과 유형이 있으며, 이는 JSON 컨트롤러 메소드를 생성하는 것을 좀 더 쉽게 만들어 줍니다. 이는 해당 뷰를 필요로 하지 않기 때문입니다.또한 익명의 데이터 구조를 사용할 수 있으므로 메소드별 예측을 좀 더 단순화할 수 있습니다.
EDIT 여기 위의 jQuery 코드가 이해할 수 있는 JSON 구조를 반환하는 기본 방법이 있습니다.참고: 속성은u.Username
그리고.u.ID
Users 개체에 따라 달라집니다.
[HttpPost]
public JsonResult GetUsers() {
return Json(new {
Users = from u in _usersRepository.Get()
select new { Description = u.Username, ID = u.ID }
});
}
하지만 가능한 한 빨리 이 방법을 버리고 표준 JSON 메시지 구조를 사용하는 것을 권장합니다.제가 사용하는 것은 이런 것입니다.
{
Success: bool,
LoggedIn: bool,
ClientErrors: [
{ Number: int, Description: string, Parameter: string },
{ Number: int, Description: string, Parameter: string }...
],
ServerErrors: [
{ Id: int, Message: string },
{ Id: int, Message: string }...
],
Data: {}
}
다음과 같은 몇 가지 이유가 있습니다.
- 당신의 JSON 메서드 라이브러리는 일종의 프로토콜이므로 표준 헤더의 이점을 얻을 수 있습니다.
- 오류 처리로 인한 이점이 가장 큽니다.사용자에게 무엇인가 잘못되었음을 알리는 일관된 방법을 갖는 것은 앞으로 매우 귀중한 일입니다.
- 클라이언트 오류(잘못된 사용자 이름, 잘못된 암호 등)와 서버 오류(오프라인 데이터베이스)를 구별하는 것이 매우 중요합니다.하나는 사용자가 고칠 수 있고 다른 하나는 고칠 수 없습니다.
- 클라이언트 오류는 해당 입력 필드 옆에 이러한 오류 메시지를 쉽게 표시할 수 있도록 메시지뿐만 아니라 해당 매개 변수를 원인으로 하는 매개 변수를 반환해야 합니다.
- 또한 클라이언트 오류는 오류를 식별하는 고유한 숫자(메소드별)를 제공해야 합니다.이를 통해 다국어 지원이 가능합니다.
- 서버 오류는 기록된 오류의 ID를 제공해야 합니다.이렇게 하면 사용자가 지원부에 문의하여 발생한 특정 오류를 참조할 수 있습니다.
- 로그인 부울을 사용하면 JSON 메서드의 리디렉션 작업 결과가 영향을 주지 않으므로 인증이 필요한 메서드를 사용하는 모든 페이지에서 사용자를 로그인 화면으로 쉽게 다시 리디렉션할 수 있습니다.
- 마지막으로 Data 필드는 메소드별 데이터를 제공해야 하는 곳입니다.
당신은 결코 나의 구조를 그것을 하는 방법으로 생각해서는 안됩니다.분명히 당신의 지원 요구는 저와 크게 다를 수 있습니다.어떤 특정 구조보다 일관성이 여기서 교훈입니다.
편집: 2016년 06월 01일 - 사람들이 여전히 이 답변을 보고 있는 것을 볼 때.드롭다운을 채우는 것과 관련하여 양방향 바인딩 프레임워크를 사용하는 것을 검토하는 것을 추천합니다.저는 개인적으로 녹아웃을 더 좋아합니다.각도는 있지만 얼마나 쉽고 가벼운지에 대한 JS.JS도 그 일을 할 것입니다.그 외에 이 답변의 나머지 부분은 여전히 상당히 최신 상태입니다.
편집: 8/10/2016 - 코드에 쉼표가 없습니다.
저는 jQuery 옵션을 사용하겠습니다.
// You are missing the new anonymous function call
$("#usersList").click(function() {
// If the select list is empty:
if ($(this).find("option").size() > 0) {
// Documentation on getJSON: http://api.jquery.com/jQuery.getJSON/
$.getJSON("/Users/GetUsers.php", null, function (data) {
$.each(data.items, function(i,item){
// Create and append the new options into the select list
$("#usersList").append("<option value="+item.id+">"+item.yourName+"</option>");
});
});
}
});
부터.append()
연산은 상대적으로 'expensive'이므로 정보를 포함하는 문자열을 만들어 다음과 같이 한 번만 추가할 수도 있습니다.
var collaboration = "";
$.each(data.items, function(i,item){
collaboration += "<option value="+item.id+">"+item.yourName+"</option>";
});
$("#usersList").append(collaboration);
...
다음은 선택 목록이 비어 있는지 확인하는 방법을 보여주는 jsfiddle입니다.
언급URL : https://stackoverflow.com/questions/10233464/populate-select-box-options-on-click-with-javascript-jquery-with-json-data
'programing' 카테고리의 다른 글
TensorFlow, "'module' 개체에 'placeholder' 속성이 없습니다." (0) | 2023.09.26 |
---|---|
MySQL 트리거를 사용하여 모든 테이블 변경 내용을 보조 테이블에 기록 (0) | 2023.09.26 |
WordPress 스팸 on ?action=register URL (0) | 2023.09.26 |
다중 사이트 네트워크에서 사이트 단위로 플러그인을 설치하는 방법은 무엇입니까? (0) | 2023.09.21 |
문자 및 ASCII 코드를 C로 인쇄 (0) | 2023.09.21 |