jquery ajax 'post' call

本文关键字:call post ajax jquery | 更新日期: 2023-09-27 18:07:01

我是jQuery和Ajax的新手,我在'post'方面遇到了麻烦。

我使用jQuery Ajax 'post'调用将数据保存到DB。当我试图保存数据时,它将null传递给我的c#方法。jQuery看起来像这样:

function saveInfo(id) {
        var userID = id; 
        var userEmail = $('.userEmail').val();
        var userName  = $('.userName').val();
        var dataJSON = {"userID": userID, "userEmail": userEmail, "userName": userName};
            $.ajax({
                type: 'POST',
                url: '../../Services/AjaxServices.svc/SaveUser',
                data:JSON.stringify(dataJSON),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'
            });
        return false;
    }`

。userEmail和. username是输入字段的类引用。c#代码看起来像这样:

[ServiceContract(Namespace = "http://testUsePage.com")]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]                                                                        
public class AjaxServices
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat           = WebMessageFormat.Json)]
    public void SaveUser(User user)
    {
        //code here handles save
    }
}

我在'SaveUser'方法中设置了一个断点,并且传递的User对象总是空的。谢谢!

编辑:我切换了'POST'到'GET'在ajax调用和WebInvoke属性。将一个参数({"UserID": UserID})传递给带有签名(public void SaveUser(string UserID))的方法,到达断点,并毫无例外地传递UserID。切换回post会立即导致内部服务器错误。

jquery ajax 'post' call

你应该这样发送你的用户数据:

{user: {userID: 1,…}}

,因为您正在使用包装请求。json中的第一个元素应该是你的参数名。

剩下的代码看起来没问题。你应该使用stringify

对于这么小的东西你不需要使用json。试试这个

function saveInfo(id) {
    var userID = id; 
    var userEmail = $('.userEmail').val();
    var userName  = $('.userName').val();
        $.ajax({type: 'POST',
            url: '../../Services/AjaxServices.svc/SaveUser/?userID='+userID+"&userEmail="+userEmail+"&userName="+userName,
        });
    return false;
}

您没有将WebInvoke属性的RequestFormat属性设置为json。

也在$。ajax调用发送数据:dataJSON没有JSON。stringify电话。

如果这失败,尝试以下将发送表单编码的信息(默认),而不是json。客户端

$.post('../../Services/AjaxServices.svc/SaveUser',
 {"userId": userID, "userEmail": userEmail, "userName": userName}
);
服务器端

[WebInvoke(Method = "POST", UriTemplate = "SaveUser?userId={userId}&userEmail={userEmail}&userName={userName}")]
public void SaveUser(string userId, string userEmail, string userName)

您是否尝试过在Firefox的Firebug中打开Net选项卡并分析您的调用,以查看发布到web服务的实际数据是什么?如果里面的数据是空的,那么你就知道你的Javascript有问题,然后试着调试你的Javascript。

但问题可能是你的web服务方法签名是期望一个用户对象作为参数,但你正在传递一堆文字参数。你可以像这样修改你的方法签名,它可能会工作:

public void SaveUser(string userID, string userEmail, string userName)

我看了你的评论,试试这个:

在客户端脚本中没有对JSON对象进行字符串化

public class AjaxServices
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public void SaveUser(string userID, string userEmail, string userName)
    {
        //code here handles save
    }
}

简单地说:$.ajax()data属性是数据的映射(对象),而不是数据字符串。在发送之前不要对对象进行字符串化:

var dataJSON = {"userID": userID, "userEmail": userEmail, "userName": userName};
$.ajax({
    type: 'POST',
    url: '../../Services/AjaxServices.svc/SaveUser',
    data: dataJSON,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});