意外令牌> jquery ajax



我正在对一个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调用传递的值。

最新更新