2010-06-05 4 views
0

Мой вызов jQuery ajax с ошибкой undefined ошибка. Мой JS код выглядит следующим образом:jQuery ajax вызов с ошибкой с неопределенной ошибкой

$.ajax({ 
    type: "POST", 
    url: "Data/RealTime.ashx", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    timeout: 15000, 
    dataFilter: function(data, type) { 
     alert("RAW DATA: " + data + ", TYPE: "+ type); 
     return data; 
    }, 
    error: function(xhr, textStatus, errorThrown) { 
     alert("FAIL: " + xhr + " " + textStatus + " " + errorThrown); 
    }, 
    success: function(data) { 
     alert("SUCCESS"); 
    } 
}); 

Мой Аякса источник является родовым обработчик ASP.NET:

[WebService(Namespace = "http://my.website.com")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class RealTime : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "application/json"; 
     context.Response.Write("{ data: [1,2,3] }"); 
     context.Response.End(); 
    } 

    public bool IsReusable 
    { get { return false; } } 
} 

Теперь, если я вернусь пустой объект ("{ }") в моем обработчике, то вызов будет добиться успеха. Но когда я возвращаю любой другой объект JSON, вызов завершается с ошибкой.

Обработчик dataFilter показывает, что я получаю правильный объект. Firebug показывает ответ, как ожидалось, а вкладка JSON показывает, что объект правильно разбирается.

И что может быть причиной?

[Редактировать] Я должен был на самом деле написано «когда я вернусь любой недопустимый объект JSON, вызов не»! : D

+2

Что у вас есть, недействительно JSON, что вы получаете, когда вы меняете его на это: 'context.Response.Write (" {\ "data \": [1,2,3]} "); –

+0

Большое спасибо, что сделали. Firebug, очевидно, немного менее строг в разборе, поэтому я вообще не думал об этом. Вы можете скопировать это в ответ, чтобы я мог его принять. – Groo

+0

Firebug не разбирается * JSON *, это разбор * Javascript * - есть разница. Если вы использовали Firebug для передачи этой строки в реализацию Javascript строгого парсера JSON, вы бы получили ошибки. – Pointy

ответ

2

Вам нужен действительный JSON! :)

Изменить эту строку:

context.Response.Write("{ data: [1,2,3] }"); 

Для этого:

context.Response.Write("{ \"data\": [1,2,3] }"); 

JQuery 1.4+ не терпит недопустимый JSON, как раньше (не может молча/в странных отношениях), так просто добавьте двойные кавычки, и все готово. Для удобного инструмента для проверки достоверности JSON, проверка JSONLint: http://www.jsonlint.com/

+0

Да, в прошлый раз я использовал этот материал с jQuery 1.3.2, и он сработал. Забавно, что мне никогда не приходило в голову попробовать старый проект и посмотреть, что произойдет. :) – Groo

+0

Рамки стали более строгими ... – Pointy

+0

@Groo - Ах да, это самая распространенная проблема с ними, но поскольку @Pointy говорит, что они более строгие ... но по какой-то причине, это так, если родной JSON .parse' присутствует, мы можем использовать гораздо более быструю реализацию браузера, чтобы выполнить работу, выиграть для всех, как только все браузеры поддерживают ее свойство, jQuery просто завертывает ее до тех пор :) –

Смежные вопросы