2011-08-31 5 views
2

javascript 변수의 내용을 처리를 위해 서버에 전달하려고합니다. 정적 문자열 전달할 수 있지만 문자열을 포함하는 변수를 전달할 때 WebMethod 호출되지 않습니다. 여기 내 코드입니다 : (클라이언트)jQuery.ajax "data"매개 변수 구문

function expand(checkbox) 
{ 
    var selectedrow = checkbox.parentNode.parentNode; 
    var rowindex = selectedrow.rowIndex; 
    var parent = document.getElementById("parentTable"); 
    var NextRow = parent.rows[rowindex + 1]; 

    var cols = selectedrow.cells[1]; 
    var ID = cols.firstElementChild.attributes.value; 


    $.ajax({ 
     type: "post", 
     url: "Playground.aspx/childBind", 
     data: "{sendData: ID}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { alert("successful!" + result.d); } 
    }) 

    NextRow.style.visibility = "visible"; 
} 

내가 데이터를 시도한다면

[WebMethod] 
    public static string childBind(string sendData) 
    { 
     return String.Format("Hello"); 
    } 

이제 (서버) : "{같이 sendData는"확인 "}"는의 WebMethod가 호출되는 및 응답을 반환합니다. 구문이 어떻게 잘못 되었습니까?

+0

작품 : http://stackoverflow.com/questions/7262940/webmethod-not-being-called – Seraph812

답변

3

문자열로 전달할 필요가 없습니다. ID은 자바 스크립트 변수이므로 값을 전달해야합니다. "{sendData: ID}"으로 데이터를 전달할 때 ID 값을 전달하지 않습니다.

는이

data: { sendData: ID } 
+0

@ Seraph812 - 희망이 h 너를 괴롭혔다. – ShankarSangoli

+0

다른 곳에서는 오류를 잡을 수 있었지만 작동하지 않는 것 같습니다. 자바 스크립트에서 작은 수정 후, 지금은 올바른 값을 저장하고 있습니다. var ID = cols.firstElementChild.defaultValue; 그러나 서버 측 웹 메소드는 여전히 호출되지 않습니다. "contentType"및 "dataType"행을 주석 처리하면 클라이언트 측의 "success"문이 호출됩니다. "ID"는 실제로는 GUID 인 히든 필드에서 문자열 값을 보유합니다 (그러나 저장시 문자열입니다). 서버 측 웹 메서드는 문자열을 필요로합니다. – Seraph812

+0

어떤 수정을 했습니까? 당신은 아직도 당신이'data : "{sendData : ID}"를 전달하고 있다는 것을 의미합니까? – ShankarSangoli

3

대신 ("{sendData: ID}" 대신 {sendData: ID}의) 객체의 문자열을 전송했다보십시오. 그리고 전송 한 데이터는 JSON이 아닙니다. 따라서 contentType 행을 제거하고 데이터 행을 변경하십시오. 이 같이 다시 작성해야 : 당신이 보내려면,

$.ajax({ 
    type: "post", 
    url: "Playground.aspx/childBind", 
    data: {sendData: ID}, 
    dataType: "json", 
    success: function (result) { alert("successful!" + result.d); } 
}) 

당신이 쓸 수 JSON :

$.ajax({ 
    type: "post", 
    url: "Playground.aspx/childBind", 
    data: $.getJSON({sendData: ID}), 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function (result) { alert("successful!" + result.d); } 
}) 
+0

지금은 올바른 데이터가 있지만 서버 측 웹 메소드가 여전히 호출되지 않은 것 같다. "contentType"및 "dataType"행을 주석 처리하면 클라이언트 측의 "success"문이 호출됩니다. "ID"는 실제로는 GUID 인 히든 필드에서 문자열 값을 보유합니다 (그러나 저장시 문자열입니다). 서버 측 웹 메서드는 문자열을 필요로합니다. – Seraph812

+0

json으로 데이터를 보내지 않으므로 contentType 행을 제거해야합니다 (데이터를 json으로 다시 받기 만 함). 또는 데이터 주위에 jQuery.getJSON()을 추가 할 수 있습니다. –

0

당신은 jQuery를 대답 이러한 테스트 실행 사용하고 있기 때문에 :

을 여기

var ID = 45; 

var x = "{sendData: ID}"; 

alert(jQuery.isPlainObject(x)); // false 

var y = { sendData: ID}; 

alert(jQuery.isPlainObject(y)); // true 
는 jsFiddle입니다 :

http://jsfiddle.net/3ugKE/

0

'ID'는 변수가 아닌 문자열으로 전달됩니다. 데이터 객체 주위의 따옴표를 제거하면됩니다.

는 또한 JSON과 자바 스크립트 객체에 읽기 :

http://www.json.org/

http://www.w3schools.com/js/js_objects.asp

+0

올바른 데이터가 현재 서버에 있지만 서버에있는 것처럼 보입니다. - 사이드 웹 메서드는 여전히 호출되지 않습니다. "contentType"및 "dataType"행을 주석 처리하면 클라이언트 측의 "success"문이 호출됩니다. "ID"는 실제로는 GUID 인 히든 필드에서 문자열 값을 보유합니다 (그러나 저장시 문자열입니다). 서버 측 웹 메서드는 문자열을 필요로합니다. – Seraph812

0

는이 코드를 사용할 수 있습니다 : 여기

$.ajax({ 
     type: "post", 
     url: "Playground.aspx/childBind", 
     data: JSON.stringify({sendData: ID}), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { alert("successful!" + result.d); } 
    })