2009-04-06 4 views
1

저는 첫 번째 MVC 응용 프로그램을 빌드하고 AJAX/JSON을 사용하여 검색을 수행하는 중에 문제가 발생했습니다. 문제는 내 컨트롤러에서 반환 한 JSON이 jQuery의 $ .each 메서드를 사용하여 내 항목을 반복 할 수 없다는 의미의 배열이 아닌 것 같습니다. 전자 메일 주소로 사용자를 검색하려고합니다.컨트롤러의 Json() 메서드가 배열을 반환하지 않습니다.

나는 다음과 같은 방법과 SearchController 클래스있어

:

[{"EmailAddress":"[email protected]","UserName":"[email protected]","FirstName":"Foo","LastName":"Bar"}] 

: 그리고 정확하게 발사와 JSON 배열처럼, 어쨌든 나에게 보이는 뭔가를 반환

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SearchByEmail(string searchString) 
{ 
    var users = new List<jsonUser>(); 
    foreach (I_User u in _rep.SearchByEmail(searchString)) 
    { 
    users.Add(new jsonUser() 
    { 
     EmailAddress = u.EmailAddress, 
     FirstName = u.Firstname, 
     LastName = u.Surname, 
     UserName = u.Username 
    }); 
    } 
    return Json(users); 
} 

을 내 페이지에서 다음 코드를 얻었습니다.

$("#search").click(function(evt) { 
    var emailsearch = jQuery.trim($("#email").val()); 
    $.post("/Search/SearchByEmail", { searchString: emailsearch }, 
     function(Users) { 
      $("#jsonlist").text(Users); //Added to check what JSON returns. 
      alert($.isArray(Users)); //Added to work out if jQuery thinks this is an array! 
      $.each(Users, function() { 
       //Do stuff on each user item 
      }); 
     }); 
    }); 
}); 

위의 주석 된 행을 추가하면 e는이 함수가 합리적인 결과를 얻고 있음을 입증했지만 (JSON은 위에 게시 됨), 이것이 배열이라고 생각하지 않습니다. 따라서 $ .each 루프의 $ (this)는 정의되지 않습니다.

NerdDinner 응용 프로그램에서이 큰 덩어리를 빌려 왔지만 그 차이점을 실제로 볼 수 없습니다. 어떤 제안이라도 대단히 감사합니다!

답변

3

JSON을 반환하는 경우 관련 데이터 유형 매개 변수를 $ .post 호출 인수에 추가하려고 시도 했습니까?

$.post("/Search/SearchByEmail", 
     { searchString: emailsearch }, callback, "json"); 

게시물은 일반적으로 HTML 또는 텍스트로 기본 설정되어 있으므로 게시물 본문을 "비 직렬화"하는 데 필요한 평가를 수행하지 않습니다.

+0

으로 올바르게 형식화 된 문자열을 구문 분석합니다. 디버그 호출 $ ("# jsonlist") 이후로 두통이 해결되었습니다. 사용자가 문자열이 아닌 객체 였으면 실패하기 시작했습니다. –

1

응답을 올바르게 받으려면 eval()이 필요하다고 생각합니다.

+0

그게 도움이되지 않는 것 같습니다. 왜 그럴까요? 나는 eval()이 인수가 전달 된 모든 것을 실행했다고 생각했다. JSON 실행 파일인가? –

+0

eval()은 json 객체 리터럴 –

관련 문제