2015-07-01 75 views
2

我在做一個AJAX調用一個WebMethod,我得到錯誤「意外令牌「」我不知道爲什麼我得到這個..任何想法?意外標記> jQuery的AJAX

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 %>" /> 
+0

您是否獲得'data'成'警報(數據)'? –

+0

這是因爲瀏覽器並不期望從你的WebMethod返回的結束。你的迴應有些語法錯誤。 –

+0

@Dhaval - 它不會成功,所以我不確定。它返回錯誤函數。 – dave

回答

0

我得到了它通過使將WebMethod靜態工作...

[WebMethod] 
public static string AddToPrintQueue(string buttonID) 
{ 
... 
} 

位一個壞消息,因爲我再也不能引用直接輸入從aspx頁面對象。所有的值都需要通過ajax調用。

1

你從你的WebMethod返回一個字符串,但你告訴jQuery的期待JSON。

$.ajax({ 
    //... 
    dataType: "json", 
    //... 
}); 

將其更改爲文本(或完全取出)並查看是否可以解決您的問題。請參閱jQuery AJAX documentationdataType財產。

0

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'); 
     } 
}); 
+0

當然,假設您希望客戶端上的數據爲JSON,而不是字符串。如果你想要一個字符串(就像它從webmethod看起來一樣),那麼就從我們描述的'$ .ajax()'調用中取出dataType屬性。 –

0

我想的WebMethod不接受查詢字符串參數。您應該嘗試僅通過post方法調用webmethod。

0

一個匆匆可能與這個問題本身也可能只是在道路上的提示。

此行:data: {buttonID: me.id}使您的webmethod相信您發送的是名爲buttonID的對象,而不是您的C#方法中所述的字符串。

如果您希望將其視爲字符串而不是對象,則應更改爲data: {'buttonID': me.id}