이 기사에서는 jQuery에서 배열 매개변수를 전달하기 위해 ajax를 통해 웹 서비스를 호출하는 방법에 대한 관련 정보를 예제를 사용하여 자세히 소개합니다. 필요한 친구는 이를 참조할 수 있습니다.
다음 예제는 더 직관적이고 누구나 이해하기 쉽습니다.
제 프로젝트에서는 jquery.ajax를 통해 웹서비스를 호출합니다.
클라이언트 코드는 다음과 같습니다.
$.ajax({ url: "test/xxx.asmx", type: 'POST', dataType: 'xml', timeout: , data: { name: "zhangsan", tags: ["aa", "bb", "cc"] }, error: function(xml) { alert(xml.responseText); }, success: function(xml) { alert("OK"); } });
서버 코드는 다음과 같습니다.
[WebMethod] public XmlDocument xxx(string name, string [] tags ) { return sth; }
항상 예외가 발생합니다.
문제가 나타납니다. 여기:
다음은 HTTP 데이터입니다.
POST http://xxx.com/xxx.asmx/xxx HTTP/1.1 Host: center.cmis.htpc.com.cn Connection: keep-alive Content-Length: 55 Cache-Control: max-age=0 Origin: http://xxx.com User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: application/xml, text/xml, */*; q=0.01 Referer: http://xxx.com/xxx.aspx Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 name=zhangsan&tags%5B%5D=aa&tags%5B%5D=bb&tags%5B%5D=cc
그리고 예상되는 형식은 다음과 같습니다.
POST /xxx.asmx/xxx HTTP/1.1 Host: xxx.com Content-Type: application/x-www-form-urlencoded Content-Length: length name=string&tags=string&tags=string
위의 굵은 글꼴을 비교하면 게시물 데이터에는 문제가 없습니다.
name=zhangsan&tags=aa&tags=bb&tags=cc
문제는 jquery.ajax에 있는 것 같습니다. 코드(jquery.1.8.3.js)를 참조하세요.
function buildParams(prefix, obj, traditional, add) { var name; if (jQuery.isArray(obj)) { // Serialize array item. jQuery.each(obj, function(i, v) { if (traditional || rbracket.test(prefix)) { // Treat each array item as a scalar. add(prefix, v); } else { // If array item is non-scalar (array or object), encode its // numeric index to resolve deserialization ambiguity issues. // Note that rack (as of ..) can't currently deserialize // nested arrays properly, and attempting to do so may cause // a server error. Possible fixes are to modify rack's // deserialization algorithm or to provide an option or flag // to force array serialization to be shallow. //ytx buildParams(prefix, v, traditional, add); //buildParams(prefix + "[" + (typeof v === "object" ? i : "") + "]", v, traditional, add); } }); } else if (!traditional && jQuery.type(obj) === "object") { // Serialize object item. for (name in obj) { buildParams(prefix + "[" + name + "]", obj[name], traditional, add); } } else { // Serialize scalar item. add(prefix, obj); } }
위 내용은 제가 모든 사람을 위해 정리한 내용이므로 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 기사:
Ajax를 사용하여 배열을 전송하는 방법 및 백그라운드 수신에 대한 자세한 설명
AJAX 페이징 효과는 구현이 간단합니다(그래픽 튜토리얼)
Ajax 데이터 전송 문제를 해결하는 방법 특수문자와 함께
위 내용은 jQuery에서 웹 서비스를 호출하는 ajax를 통해 배열 매개변수를 전달하는 문제(그래픽 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!