getJSON завершается неудачно, JSON проверяет - PullRequest
1 голос
/ 11 августа 2009

У меня есть вызов getJSON, который необъяснимым образом не работает. Идея состоит в том, что вы нажимаете кнопку, чтобы отправить комментарий, URL-адрес получает доступ, который определяет, является ли комментарий в порядке или содержит непослушные слова в нем. Ответ дается в форме JSON.

Вот спаренный JS, который генерирует вызов. Комментарий и URL уже находятся на странице, он захватывает их и обращается к URL:

ФОРМА HTML:

<fieldset id="mg_comment_fieldset" class="inlineLabels">
<div class="ctrlHolder">
    <textarea id="id_comment" rows="10" cols="40" name="comment"></textarea>
</div>
<div class="form_block">
    <input type="hidden" name="next" value="" />
    <input id="mg_comment_url" type="hidden" name="comment_url" value="" />

    <input id="mg_comment_submit" type="submit" value="Remark" />
</div>
</fieldset>

КОНКРЕТНЫЙ БЛОК JS, КОТОРЫЙ ОТПРАВЛЯЕТ / ПРОЧИТАЕТ ОТВЕТ:

$('input#mg_comment_submit').click(function(){
var comment = $("textarea#id_comment").val();
var comment_url = $('input#mg_comment_url').val();
$.getJSON(
    comment_url+"?callback=?&comment="+comment+"&next=",
    function(data){
        console.log(data);
        alert(data);
    });         
});

Ответ JSON:

[{"errors": {"comment": ["Weve detected that your submission contains words which violate our Terms and Conditions. Please remove them and resubmit test"]}}]

Он возвращается как mimetype application / json. Это проверяется в JSONLint. Я также попытался добавить пару функций AJAX, чтобы попытаться перехватить ошибки, и они оба молчат. Я вижу, как запрос отправляется в Firebug и возвращается как ответы статуса 200, которые проверяются в JSONLint и которые я могу очень просто просмотреть на вкладке JSON ответа. Если я ставлю предупреждение перед getJSON, оно запускается; просто внутри ничего не работает. Я также обнаружил, что если я изменяю .getJSON на .get, предупреждения запускаются, предполагая, что это что-то с JSON. У меня нет идей относительно того, в чем может быть проблема. Использование Firefox 3.0.13.

Ответы [ 4 ]

3 голосов
/ 11 августа 2009

Параметр строки запроса "callback=?" вступает в действие, если вы используете межсайтовый скриптинг или jsonp, если вы публикуете тот же сервер, вам не нужно его использовать.

Если вам нужно или хотите использовать эту опцию, код на стороне сервера должен вернуться с функцией обратного вызова, включенной в ответ json.

Пример:

$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});

Так что, если необходимо, внесите изменения на стороне сервера или просто удалите параметр "callback=?" из URL.

Вот больше информации о jsonp

1 голос
/ 11 августа 2009

Можете ли вы вручную позвонить в сервис без каких-либо ошибок? Вы пытались использовать firebug и заглянули под XBR, чтобы увидеть сообщение / ответ полезных нагрузок JSON? Обычно я использую .NET в качестве своих конечных точек, а в .NET 3.5 мне нужно использовать тип контента «application / json; charset = utf-8».

Вот пример рабочего вызова JSON, который я использую в .NET с jQuery 1.3.2

$.ajax({   
    type: "POST",   
    url: "WebService1.ASMX/HelloWorld",   
    contentType: "application/json; charset=utf-8",   
    dataType: "json",   
    data: "{}",   
    success: function(res) {   
    // Do your work here.   
    // Remember, the results for a ASMX Web Service are wrapped   
    // within the object "d" by default. e.g. {"d" : "Hello World"}   
    }   
});
0 голосов
/ 11 августа 2009

Можете ли вы попробовать добавить глобальную функцию ajaxError для регистрации ошибки.

$.ajaxError( function(event, XMLHttpRequest, ajaxOptions, thrownError){
   console.log( thrownError );
 });
0 голосов
/ 11 августа 2009

Вы пробовали это с $ .ajax? После этого вы можете определить как обратные вызовы ошибок, так и успешные, и получите лучшее представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...