无法从jQuery脚本

时间:2015-05-12 17:26:14

标签: jquery asp.net vb.net asp.net-web-api

在开发真正的应用程序之前,我正在为Web Api项目做一个小问题测试。我实施了一些基本的GET操作没有问题,但我对POST请求有一些问题。 我正在使用jQuery调用POST请求

var data = { name: "Pedro" };
$.post({
        url: "http://localhost/Demo/api/user",
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        data: $.stringify("="+data),
        success: function (data) {
            alert(data[0].Name);
        },
        error: function () {
            alert("error");
        },
        complete: function () {
            alert("complete");
        }
    })

我的POST动作就像这样(在UserController.vb上)

Public Function PostUser(<FromBody()> ByVal name As String) As Demo.User.Model.User
    Dim ids As Integer() = From userId In (From user In users Select user.Id)

    Dim maxId As Integer = ids.Max + 1
    Dim newUser As Demo.User.Model.User = New Demo.User.Model.User With {
        .Id = maxId, _
        .Mail = name & "@abc.com", _
        .Name = name _
    }
    users(maxId) = newUser
    Return newUser
End Function

使用上面的jQuery代码,我没有收到错误或异常消息,甚至没有达到它的动作。但是,如果我从代码隐藏(我通过Web表单项目实现Web Api)测试操作,则会调用该操作。以下是我从代码隐藏

进行测试的方法
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim client As New WebClient()
    Dim data As New NameValueCollection()

    data.Add("name", "Pedro")

    Dim response As Byte() = client.UploadValues("http://localhost/Demo/api/user", "POST", data)
    lbl.Text = Encoding.ASCII.GetString(response)
End Sub 

所以,我的问题是,为什么我无法使用我的js代码访问网络Api操作?

因为你问,我使用$.stringify("="+data),,因为我用this code扩展了jQuery,我已经这样做了,因为我需要支持旧版本的IE。

我还检查了this question,没有成功

更新:我已在Chrome上调试了该网站,并获得了404 error。出于某种原因,数据对象被发送为http://localhost/Demo/[object%20Object]

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题,但仍然不太了解它。查看jQuery documentation,我发现data来电中的$.post()选项适用于GET请求

  

data类型:PlainObject或String或Array要发送到的数据   服务器。如果不是字符串,它将转换为查询字符串。   已将其附加到GET请求的网址。请参阅processData选项   防止这种自动处理。对象必须是键/值对。如果   value是一个数组,jQuery使用相同的键序列化多个值   基于传统设置的价值(如下所述)。

所以我将代码更改为$.post()调用的first option

var data = { Name: "Pedro", Mail: "peter@mail.com" };
$.post("http://localhost/Demo/api/user", data, function (d) { alert(d);}, "json")

这实际上解决了我的问题,但我对解决方案不太满意,因为正如jquery docs中所提到的,data属性会根据方法调用改变它的行为,所以我觉得它应该像我以前一样好......如果任何人能澄清这将是很棒的:))