Ошибка синтаксиса: JSON.parse - PullRequest
       19

Ошибка синтаксиса: JSON.parse

0 голосов
/ 28 ноября 2011

Я пытался вызвать простой веб-метод из JSON, но получаю ошибки.

в Chrome:

SyntaxError: неожиданный токен <</p>

В Firefox:

SyntaxError: JSON.parse

Javascript код:

 $(document).ready(function() {
     $('#<%=ddlTest.ClientID %>').change(function() {
         var value = $('#<%=ddlTest.ClientID %>').val();
         var req = $.ajax({
             type: "POST",
             url: "Test.aspx/getTest",
             data: "{Id: '" + value + "'}",
             contentType: "application/json; charset=utf-8",
             dataType: "json",
             success: function(data) {
                 $(alert(data.d))
             },
             error: function(XMLHttpRequest, text, error) { alert(error); },
             failure: function(response) {
                alert(response.d);
             }
         })
    });
 });     

.aspx код:

<asp:DropDownList ID="ddlTest" AutoPostBack="false" runat="server">
    <asp:ListItem Value="0" Text="zero" />
    <asp:ListItem Value="1" Text="One" />
    <asp:ListItem Value="2" Text="Two" />
</asp:DropDownList>
<asp:Label ID="lblTest" runat="server" Text="hiii"/>

WebMethod:

[WebMethod] 
public static string getTest(string id)
{
    return id;
}

Пожалуйста, ведите меня ...

Ответы [ 3 ]

0 голосов
/ 28 ноября 2011

Если вы посмотрите на ответ на ваш запрос AJAX в чем-то вроде Firebug, вы увидите, что вместо JSON возвращается HTML-разметка.

Это потому, что ваш параметр data не совсемправо.Из-за этого ваш запрос не соответствует ни одному из доступных методов страницы и в итоге обрабатывается как обычный запрос к самой странице ASPX.

Поскольку первый символ документа HTML является недействительнымПервый символ для документа JSON, анализатор JSON не сможет правильно его проанализировать.

Чтобы исправить это, измените параметр data следующим образом:

// Parameters to page methods are case sensitive. Id != id.
//
// Parameter names need to be quoted. ASP.NET will allow for both double and
//  single quotes, but technically only double quotes are valid JSON.
data: '{"id": "' + value + '"}",

Построение строк JSON вручнуюклиентская сторона быстро запутывается.Возможно, вас заинтересует использование JSON.stringify для очистки этого процесса .

0 голосов
/ 29 ноября 2011

Я получил решение для моей проблемы. Я просто добавил дурака. строк в мой файл web.config и теперь он работает нормально.

<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
0 голосов
/ 28 ноября 2011

удалить 'return id';

вместо этого вы должны сериализовать ответ в JSON и сделать запись ответа

    using System.Text;
    using System.Runtime.Serialization.Json;
    using System.IO;

...

    public static string ToJSON(this object obj)
            {
                string json = string.Empty;

                DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());

                using ( MemoryStream ms = new MemoryStream() )
                {
                    ser.WriteObject(ms, obj);
                    json = Encoding.Default.GetString(ms.ToArray());
                }

                return json;
            }

...

HttpContext.Current.Response.Write(ToJSON(id));
...