2015-01-02 3 views
0

에서 .aspx 페이지 JSON 객체를 수락하지 :MVC 4 아약스 쿼리는 컨트롤러에서

<script type="text/javascript"> 
     $(document).ready(function() 
     { 
      $('********').click(function (id) 
      { 
       var test = "test"; 
       $.ajax(
       { 
        type: "POST", 
        url: "*************", 
        data: { type: test }, 
        dataType: "string",    
        success: function (data) { show(data); }, 
        failure: function() { alert("Failed"); } 
       }); 
      }); 
     }); 

     function show(data) 
     { 
      alert("Worked"); 
     } 
</script> 

컨트롤러 기능 : 나는 주위의 코드에서 물건의 이름을 변경하지만, 어쨌든

[HttpPost] 
public ActionResult getTest(String type) 
{ 
    List<Test> test = new List<Test>(); 
    SqlConnection con = new SqlConnection("*****************"); 
    SqlCommand cmd = new SqlCommand("****************"); 
    cmd.Connection = con; 
    cmd.Connection.Open(); 
    SqlDataReader reader = cmd.ExecuteReader(); 

    int i = 0; 
    while (reader.Read()) 
    { 
      test.Add(new Test{ itemName = reader.GetString(0), 
          itemType = reader.GetString(1), 
          itemClass = reader.GetString(2), 
          imageURL = reader.GetString(3)}); 
    } 
    var test = Json(test, JsonRequestBehavior.AllowGet); 
    return test; 
} 

웹 사이트를 실행하고 div를 클릭하면 컨트롤러에 연결하고 올바른 json 객체를 반환합니다 (반환 선에 중단 점을 넣어서 어떤 테스트가 채워 졌는지 확인합니다). 아무 것도 웹 페이지로 돌아 가지 않습니다. 웹 브라우저 디버거에서는 ajax 함수에 중단 점을 넣었지만 그 점은 맞았지만 계속해서 성공하면 show 함수에 중단 점에 도달하지 않습니다. 또한 경고 ("오류")도 표시되지 않으며 데이터를 가져 오거나 URL을 변경하면 오류 경고가 표시됩니다.

내가 시도 할 것들 ... JsonResult에 컨트롤러 유형 변경

- 컨트롤러 반환 같은 일을하지만, 결코 다시 페이지에 가져옵니다.

ajax 함수에 contentType을 추가하려고 시도 했으므로 컨트롤러가 호출되지 않습니다. 어떤 값을 입력했는지 상관없이 "application/json; charset = utf-8"< -이 것은 작동하지 않습니다.

그냥 성공을 표시 한 아약스의 속기 버전을 사용해 보겠습니다.

답변

0

은 내가 문자열에 컨트롤러 함수의 반환 유형을 변경 한 후 내가 다시 전달 될 수있는 JSON 문자열로 만들어 낸 모델의 목록을 설정하는 자바 스크립트 시리얼 라이저를 사용하여 ... 그것을 알아 냈다 보기에서 ajax 함수. 또한 ajax 함수는 return 유형이 대부분인 것을 자동으로 파악할 수 있기 때문에 ajax 함수에서 dataType을 제거했습니다.

자바 스크립트 :

<script type="text/javascript"> 
     $(document).ready(function() 
     { 
      $('********').click(function (id) 
      { 
       var test = "test"; 
       $.ajax(
       { 
        type: "POST", 
        url: "*************", 
        data: { type: test },    
        success: function (data) { show(data); }, 
        failure: function() { alert("Failed"); } 
       }); 
      }); 
     }); 

     function show(data) 
     { 
      alert("Worked"); 
     } 
</script> 

컨트롤러 :이 코드는 그때 객체의 배열처럼 사용할 수있는 뷰에 JSON 객체를 반환, 그래서 여러 된 div를 추가 할 수

[HttpPost] 
public String getTest(String type) 
{ 
    List<Test> test = new List<Test>(); 
    SqlConnection con = new SqlConnection("*****************"); 
    SqlCommand cmd = new SqlCommand("****************"); 
    cmd.Connection = con; 
    cmd.Connection.Open(); 
    SqlDataReader reader = cmd.ExecuteReader(); 

    int i = 0; 
    while (reader.Read()) 
    { 
      test.Add(new Test{ itemName = reader.GetString(0), 
          itemType = reader.GetString(1), 
          itemClass = reader.GetString(2), 
          imageURL = reader.GetString(3)}); 
    } 
    System.Web.Script.Serialization.JavaScriptSerializer jSearializer = new  System.Web.Script.Serialization.JavaScriptSerializer(); 
    var temp = jSearializer.Serialize(test); 
    return temp; 
} 

내 각 객체에 대한 뷰를 작성한 다음 객체 값을 div에 씁니다.

0

는 AJAX 요청에서이 줄을 제거하십시오 :

dataType: "string", 

컨트롤러가 JSON을 반환, 그래서 당신이 올바른 유형 지정해야합니다 :

dataType: "json", 

를하지만, jQuery를하기 때문에 충분히 지능 Content-Type 응답 헤더를 사용하여 올바른 콘텐츠 형식을 추측하고 제거하면됩니다.

또한 IIRC의 오류 함수는 failure 대신 error입니다.

$.ajax({ 
     url: 'PUT_YOUR_URL_HERE', 
     dataType: "json", 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({ Make: maka.value }), 
     async: true, // Or false   
     cache: false, 
     success: function (data) { 
      //do something 
      } 

     }, 
     error: function (xhr) { 
      alert('error'); 
     } 
    }) 
+0

시도해 보았습니다 ... 또한 데이터 유형을 "json"으로 변경하려고 시도했지만 컨트롤러가 여전히 작동하지만 반환 값이 ajax 함수에 전달되지 않습니다. – ChumpStick

+0

이제 웹 브라우저의 콘솔을 확인하십시오. 어떤 오류라도 보셨습니까? –

+0

도 no no errors를 생성하지 않습니다. – ChumpStick

0

당신은 추가해야합니다. "dataType"은 보내는 내용이고 "accepts"는 쿼리에서 허용하는 것입니다.

$.ajax({ 
    url: 'PUT_YOUR_URL_HERE', 
    dataType: "json", 
    accepts:"application/json", 
    type: "POST", 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ Make: maka.value }), 
    async: true, // Or false   
    cache: false, 
    success: function (data) { 
     //do something 
     } 

    }, 
    error: function (xhr) { 
     alert('error'); 
    } 
}); 
+0

그리고 미래에 -이 작동있어 UI – David

+0

- BL - 당신은 DAL을 분리해야합니다. 나는 내가 필요로하는 변화가 필요한지, 아니면 내가 필요로하는 변화인지 모른다.나는 한 번에 하나씩 각 줄을 바꾸고 그것을 발견하고 내 발견을 게시 할 때 볼 것이다. – ChumpStick

+0

Google에서 확인 OOP - BL-DAL-UI는 무엇인가요? – David

0

이 시도 :

contentType: 'application/json; charset=utf-8', 

예 :

0

오늘도 비슷한 문제로 고민하고있었습니다. JSON 개체는 항상 null입니다.

var id = $('#ModalCategoryId').val(); 
    var category = $.trim($('#ModalCategory').val()); 

    var categoryJson = new Object(); 
    categoryJson.CategoryId = id; 
    categoryJson.Category = category; 
    var data = JSON.stringify(categoryJson); 

    $.ajax({ 
     "url": SAVE_CATEGORY_URL, 
     data: data, 
     type: "POST", 
     dataType: 'json', 
     traditional: true, 
     contentType: 'application/json; charset=utf-8', 

및 컨트롤러 액션 메소드 선언 ". 카테고리"나는 이외의 뭔가에 매개 변수 이름을 변경 될 때까지

[HttpPost] 
    public ActionResult SaveCategory(CategoryLookupUIObject category) 

는 JSON은 항상 널 (null) 표시 할 분명히 내 개체에 범주 속성이 있고 범주라고도하는 매개 변수가 불어났습니다. 이를 예 :

[HttpPost] 
    public ActionResult SaveCategory(CategoryLookupUIObject categoryLookup) 

으로 변경하자마자 null 대신보기 모델 객체가 전달되기 시작했습니다. "category"를 제외한 모든 매개 변수 이름이 작동합니다.

나는 OP에 Type이라는 속성이 있고 컨트롤러의 매개 변수 이름도 "type"으로되어있어 이것이 내 문제의 원인이라고 지적하게되었습니다. 아마 OP를 위해서도?

행운을 빈다.

관련 문제