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会立即导致内部服务器错误。你应该这样发送你的用户数据:
{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'
});