意外的令牌>;jquery ajax
本文关键字:jquery ajax gt 令牌 意外 | 更新日期: 2023-09-27 18:00:41
我正在对一个web方法进行ajax调用,但我得到了错误"expected Token>"。我不知道为什么会得到这个。。有什么想法吗?
function addToQueue(me) {
if (validateTimeFrame()) {
$.ajax({
method: "POST",
url: "GenerateReportModal.aspx/AddToPrintQueue?id=" + $('#patientNum').val(),
data: {buttonID: me.id},
dataType: "json",
success: function (data, textStatus, jqXHR) {
alert(data);
$('#GenerateReportModal').dialog('close');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown + ' ' + textStatus);
console.log(jqXHR);
$('#GenerateReportModal').dialog('close');
}
});
}
}
<----------------------------------------------------->
[WebMethod]
public string AddToPrintQueue(string buttonID)
{
try
{
var deIdentify = 0;
var adminUserNum = Int32.Parse(Session["AdminUserNum"].ToString());
if ((Session["AdminUserNum"].ToString() == "6460" || Session["AdminUserNum"].ToString() == "6537" || Session["AdminUserNum"].ToString() == "7885") && (Session["ClinicalDataAdmin"].ToString() == "1" || Session["AccountAdmin"].ToString() == "1" || Session["SystemAdmin"].ToString() == "1"))
deIdentify = (cbDeIdentify.Checked == true) ? 1 : 0;
else
deIdentify = 0;
switch (buttonID)
{
case "FollowUpAddtoQueue":
FollowUpAddToQueueClass(deIdentify);
break;
case "WearTimeAddToQueue":
WearTimeAddToQueueClass(deIdentify);
break;
case "TrendsAddToQueue":
TrendsAddToQueueClass(deIdentify);
break;
case "EndOfUseAddToQueue":
EndofUseAddToQueueClass(deIdentify);
break;
}
}
catch
{
return "There was an issue, we appologize for the inconvenience";
}
return "Added to print queue";
}
<----------------------------------------------------->
<asp:Button runat="server" OnClientClick="return addToQueue(this); return false;" CssClass="button" ID="EndOfUseAddToQueue" Width="150" Text="<%$ Resources:PatientDetail, btnModAddtoQueue %>" />
您正在从Web方法返回一个字符串,但您已经告诉jQuery需要JSON。
$.ajax({
//...
dataType: "json",
//...
});
把它改成文本(或者完全去掉),看看这是否能解决你的问题。请参阅jQuery AJAX文档的dataType
属性。
dataType: "json"
,要求您从webmethod
返回json
类型!!所以你需要用下面的来装饰你的webmethod
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] //Add this
public string AddToPrintQueue(string buttonID)
{
try
{
//Your other code
}
catch
{
return "There was an issue, we appologize for the inconvenience";
}
return "Added to print queue";
}
除此之外,请尝试在ajax
调用中指定contentType
,如下所示:
$.ajax({
method: "POST",
url: "GenerateReportModal.aspx/AddToPrintQueue?id=" + $('#patientNum').val(),
data: {buttonID: me.id},
contentType: "application/json; charset=utf-8", //Add this line too
dataType: "json",
success: function (data, textStatus, jqXHR) {
alert(data);
$('#GenerateReportModal').dialog('close');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown + ' ' + textStatus);
console.log(jqXHR);
$('#GenerateReportModal').dialog('close');
}
});
我认为WebMethod不接受查询字符串参数。您应该尝试仅通过post方法调用webmethod。
一个quickie可能与问题本身有关,也可能只是路上的提示。
这一行:data: {buttonID: me.id}
使您的Web方法相信您正在向它们发送一个名为buttonID的对象,而不是像C#方法中所说的那样作为字符串。
如果希望将其视为字符串而非对象,则应更改为data: {'buttonID': me.id}
。
我通过使webmethod静态。。。
[WebMethod]
public static string AddToPrintQueue(string buttonID)
{
...
}
有点麻烦,因为我再也不能直接从aspx页面引用输入对象了。所有需要通过ajax调用传递的值。