2011-11-30 2 views
2

Если кто-то может указать, что здесь не так, я бы, конечно же, его оценил. Я могу установить точку останова в веб-методе, и он попадает, но он всегда ошибочно.jQuery ajax json webservice error

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAX_Test._Default" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title>AJAX Test</title> 
     <script src="Scripts/jquery-1.7.min.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <button id="theButton">Click Here</button> 
     </form> 
     <script type="text/javascript"> 
      $(function() { 
       $("#theButton").on("click", function() { 
        $.ajax({ 
         type: "POST", 
         url: "AjaxWebService.asmx/HelloWorld", 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         data: "{}", 
         success: AjaxSucceeded, 
         error: AjaxFailed 
        }); 
       }); 
      }); 

      function AjaxSucceeded(data, status) { 
       alert("success"); 
      } 

      function AjaxFailed(jqXHR, textStatus, errorThrown) { 
       alert(errorThrown); 
      } 
     </script> 
    </body> 
</html> 

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.Services; 

namespace AJAX_Test 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 

    public class AjaxWebService : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 
    } 
} 
+1

Какая ошибка? – jrummell

+0

Каковы ошибки? – MilkyWayJoe

+0

Я изменил код, и теперь третий arg выдает ошибку внутреннего сервера. Я вижу, что есть ответ ниже, связанный с [ScriptService], и ​​я посмотрю на это. –

ответ

4

Вот ваша проблема:

Добавить этот атрибут к службе:

[ScriptService] 

и добавьте в ваш метод:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

При подключении к услуге из javascript он должен иметь эти атрибуты.

+0

Добавление [ScriptService] исправлено без [ScriptMethod ... любая идея, почему? –

+0

В любом случае, спасибо большое. Я, конечно, не нашел недостающую часть. –

+0

В MSDN - «Атрибут ScriptMethodAttribute не является обязательным. (Тем не менее, методы, которые могут быть вызваны из сценария клиента, должны иметь атрибут System.Web.Services.WebMethodAttribute.) Если метод не отмечен ScriptMethodAttribute, метод будет вызванный с помощью команды HTTP POST, и ответ будет сериализован как JSON. Вы не можете переопределить этот параметр из сценария ». Похоже, он делает то, что вы хотите по умолчанию. Узнайте, что каждый день, я всегда использовал атрибут, угадываю его необязательный. – Etch

0

Вы сообщаете jquery, что ожидаете данные JSON в качестве ответа от сервера ajax, но вы отправляете голую строку в качестве ответа. строка JSON будет "Hello World", а код на стороне сервера должен быть:

return "\"Hello World\"";