代码在使用Jquery 1.3.2时有效,但在1.7.1时失败

时间:2012-01-31 16:40:15

标签: jquery ajax

我有一个简单的HelloWorld webservice,返回Hello + Name,它与Jquery 1.3.2完全一致但是返回undefined 1.7.1 我是Jquery的新手,已经研究了很多,但无法修复。 任何帮助将不胜感激。

<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

</head>
<body>
    <form id="form1" runat="server">

    <script language="javascript" type="text/javascript">
    $.ajax({  
      type: "POST",  
      contentType: "application/json; charset=utf-8",  
      url: "http://localhost:60105/WCFService3/Service.svc/HelloWorld",  
      data: '{"name":"John"}',  
      dataType: "json",  
      success: function(response) {  
      alert(response.HelloWorldResult);  
      },  
      error: function(message) {  
      alert("error has occured");  
      }  
    });  

    </script>
</body>

2 个答案:

答案 0 :(得分:0)

我只是在学习ajax / webservice的东西,这就是我把它放在一起的东西:

//Create an empty DTO (Data Transfer Object)
var DTO = {};

$(function () {
    // set Ajax default settings
    $.ajaxSetup({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "text", //do NOT set to json!!!
        converters: {
            "text json": function (jsonString) {
                var res = JSON.parseWithDate(jsonString);
                if (res && res.hasOwnProperty("d"))
                    res = res.d;
                return res;
            }
        },
        dataFilter: function (data) {
            var msg;
            if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function')
                msg = JSON.parse(data);
            else
                msg = eval('(' + data + ')');

            if (msg.hasOwnProperty('d'))
                return msg.d;
            else
                return msg;
        }
    });

    //Set the parameter of the DTO  
    DTO.name = "John";

    $.ajax({
        url: location.protocol + "//" + location.host + "/WCFService3/Service.svc/HelloWorld",
        data: JSON.stringify(DTO),
        success: function (data) {
            alert(data.HelloWorldResult);
        },
        error: function (xhr, err, desc) {
            alert(jQuery.parseJSON(xhr.responseText).Message);
        }
    });


});

对于JSON.stringify部分,如果您的浏览器不支持它,则需要包含以下内容的json2_min.js文件:

http://www.json.org/js.html

对于我目前正在处理的网站,我只需将参数添加到需要的DTO对象中,然后将其转换为JSON并传递给服务。

对于Ajax设置,它处理.NET 3.5中引入的“d”字段

希望这有帮助。

答案 1 :(得分:0)

是您的服务器返回?在最新版本中,jQuery依赖于本机浏览器json解析,因此响应必须是有效的json,而不是像'{status:“off”}'那样。

此外,“data”参数可以是一个对象,而不仅仅是一个字符串