$ .ajax()调用返回数据但$ .post()返回“undefined”

时间:2013-04-01 07:36:34

标签: jquery ajax

有人可以帮我弄清楚为什么当我用$ .ajax()调用它来调用web服务它会返回预期的数据时,当我用$ .post()调用调用相同的服务时,返回的数据是“未定义的”?

请注意,在使用google工具检查Response(用于.post()调用)时,我可以看到从服务器发回的数据,但不知道它对.post()调用的.done()函数不可用。

程序完成且没有错误。

以下是整个代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test01</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            $("#btn01").click(function () {
                //.ajax type call
                $.ajax({
                    type: "POST",
                    url: "WebService1.asmx/GetData",
                    data: "{KenID:'11'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data)
                    {
                        $("#div01").html(data.d);
                    }
                });
            });
            $("#btn02").click(function () {
                // .post() type call
                $.post("WebService1.asmx/GetData", { KenID: "11" })
                    .done(function (data, status)
                    {
                        $("#div01").html("Data: " + data.d + "</br>Status: " + status);
                    })
                    .fail(function () { alert("error"); })
                    .always(function () { alert("completed"); });
            });
        });
    </script>
</head>
<body>
    <div id="div01">Here comes the result</div>
    <button id="btn01">Load Data with $.ajax : </button>
    <button id="btn02">Load Data with $.post : </button>
    <input id="KenID" value="11" />
</body>
</html>

谢谢,

亚切克

4 个答案:

答案 0 :(得分:3)

您需要在json中定义响应$.post

示例

$.post(
    "WebService1.asmx/GetData",
    { KenID: "11" },
    function(response)
    {
        //code
    }, 'json' // <-- HERE
);

答案 1 :(得分:0)

它基本上是$ .post是返回xml基础数据类型。如果您在控制台日志和响应选项卡中看到firebug,您将找到响应类型。这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">test</string>

因此,我建议您将XML响应转换为字符串数据类型。为此,请参阅: http://api.jquery.com/jQuery.parseXML/

希望它会对你有所帮助。

由于

答案 2 :(得分:0)

请参阅以下代码段。

$.post(""WebService1.asmx/GetData",", {id : $("#hID").val()}, function(data)
{
  doSomething( data.toString() );
});

function doSomething( data)
{
  // whatever
}

答案 3 :(得分:0)

启动服务器之前,您需要使用 urlencoded 解析JSON请求。

请注意,不要再使用urlencoder启动之后的http服务器。

例如。

app.use(express.urlencoded());

http.createServer(app).listen(3000)

无: $ node server.js

  

未定义

与: $ node server.js

  

{说明:''}

     

数据已发布到服务器!