我知道有几个问题,但我已经尝试了很多问题,我仍然无法让我的脚本进入服务器。这是我现在拥有的:
的Javascript
function UpdateSessionUser(user)
{
if (user != null)
{
var targetPage = "http://" + document.location.host + "/Sitefinity/Services/Sandbox/SessionUsers.asmx/UpdateSessionUser";
var dataText = { "jsonUser" : JSON.stringify(user) };
try
{
$.ajax({
type: "POST",
url: targetPage,
data: dataText,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response)
{
alert(response.d);
return true;
},
failure: function (msg)
{
alert(msg);
return false;
}
});
}
catch (err)
{
alert(err);
}
}
}
用户对象示例
Object
BaseID: "fe85149c-71f2-4c61-b7c6-a00300e2f84e"
HasChanged: true
IsReferralReceived: false
IsReferralRequired: true
IsSeatApproved: true
Name: "Miles"
ReferralFromUser: null
ReferralFromUserID: null
ReferralReceivedBy: null
ReferralReceivedByUserID: null
ReferralReceivedOn: "/Date(-62135578800000)/"
RegisteredOn: "1330281960000"
SeatApprovedBy: null
SeatApprovedByUserID: null
SeatApprovedOn: "/Date(-62135578800000)/"
SeatNumber: "2"
SessionID: "d0773d5e-aeeb-4b9c-b606-0a564d6c5845"
UserID: "6af2fd9e-b4b6-4f5a-8e9c-fe7ec154d4e5"
__type: "SandboxClassRegistration.SessionUserField.ClientSessionUser"
C#
[WebMethod]
public bool UpdateSessionUser(object jsonUser)
{
return SessionUserHelper.UpdateSessionUser(new ClientSessionUser(jsonUser));
}
为什么我的JSON调用永远不会进入服务器?我在函数的最开头(返回之前)设置了一个断点,这样我就可以查看jsonUser对象参数,但它永远不会在那里。
我得到的回报是这个错误:
POST http://localhost:60877/Sitefinity/Services/Sandbox/SessionUsers.asmx/UpdateSessionUser 500(内部服务器错误)
---更新
这是最终结果(我必须“对字符串化”对象,然后发送最终的dataText)。 webservice方法没有改变
function CallWebServiceToUpdateSessionUser(target, user)
{
var dataText = { "jsonUser": JSON.stringify(user) };
$.ajax({
type: "POST",
url: target,
data: JSON.stringify(dataText),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response)
{
alert(response.d);
return true;
},
failure: function (msg)
{
alert(msg);
return false;
}
});
}
答案 0 :(得分:2)
我没有多大帮助:
尝试更改此
var dataText = { "jsonUser" : JSON.stringify(user) };
到
var dataText = JSON.stringify({ "jsonUser" : user });
答案 1 :(得分:0)
我认为您需要将服务方法标记为启用JASON。
[WebMethod]
[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
public bool UpdateSessionUser(object jsonUser)
{
return SessionUserHelper.UpdateSessionUser(new ClientSessionUser(jsonUser));
}
答案 2 :(得分:0)
我意识到这个问题已经回答了一段时间,但我遇到了类似的问题,并希望提供有关OP解决方案工作原理的一些细节
我假设Web服务需要一个字符串,它将反序列化并使用
在这种情况下,调用JSON.stringify({"jsonUser": user})
不会将user
对象转换为字符串,这将导致服务器出现问题。
当您致电JSON.stringify({"jsonUser": JSON.stringify(user)})
时,您的user
oblect会转换为字符串,所有报价都会被正确转义。
希望这有助于将来。
这是说明http://jsfiddle.net/dvwCg/2/的小提琴:
<强> HTML 强>
<h1>webservice breaks</h1>
<span id="s1"></span>
<h1>webservice works</h1>
<span id="s2"></span>
<强> JS 强>
var jsonObject = {"a":1, "b":[{"x":"test", "y":12}, {"x":"test2", "y":120}]};
$("#s1").text(JSON.stringify({"d" : jsonObject}));
$("#s2").text(JSON.stringify({"d" : JSON.stringify(jsonObject)}));
p.s。
https://stackoverflow.com/a/6323528/3661也有很多有用的信息。