Ошибка jQuery $ .ajax: не удалось выполнить синтаксический анализ запроса JSON с допустимым JSON? - PullRequest
2 голосов
/ 18 февраля 2012

У меня простой вызов ajax:

$.ajax({
    url: 'http://localhost:39657/List/Receptacle',
    dataType: "json",
    success: function(json) { alert("success"); }
});

А в Fiddler весь ответ:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Sat, 18 Feb 2012 07:39:11 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 97
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close

[{"Selected":false,"Text":"ABC","Value":"3"},{"Selected":false,"Text":"XYZ","Value":"4"}]

Так что похоже сработало, но я не получил оповещения ...

Что я здесь не так делаю? Почему мой JSON не анализируется? Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

почему у вас есть '?callback=?' в конце URL?это jsonp?да, затем измените dataType:'jsonp'

Изменить

сделать обработчик ошибок

$.ajax({
    url: 'localhost:39657/List/' + $(this).val(),
    dataType: "json",
    success: function(json) {
           alert("success");
    },
    error:function(xhr){
        console.log(xhr.responseText);
    }
});

посмотреть, если он попадает в обработчик успеха или обработчик ошибок и какое сообщение об ошибке делает этодать?я не думаю, что что-то не так с синтаксическим анализом json, так как он действителен для json и хорошо анализируется смотрите здесь


, как указано вкомментарии, к которым вы добавляете блюз CORS , который реализован как функция безопасности для предотвращения атак межсайтового скриптинга, которые вы не можете использовать jsonp, просто установив для dataType значение jsonp на клиентесторона, сторона сервера также должна быть настроена, если это веб-сервис, вы можете установить заголовок ответа, чтобы разрешить междоменное распределение ресурсов на

var resp = new HttpResponseMessage();
resp.Headers.Add("Access-Control-Allow-Origin","*");

или вы можете сделать сторону сервера proxy и пусть этот прокси вызывает другой проект, будь то веб-служба или веб-приложение, а затем возвращает полученный ответ клиентской стороне

0 голосов
/ 28 сентября 2012

вы должны сделать это на стороне сервера:

 HttpResponseMessage m = new HttpResponseMessage(HttpStatusCode.NotFound);            
 m.Content = new StringContent("oops");                             
 throw new HttpResponseException(m);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...