2009-08-10 3 views
1

У меня есть вызов getJSON, который необъяснимо не работает. Идея заключается в том, что вы нажимаете, чтобы отправить комментарий, URL-адрес получает удар, который определяет, является ли комментарий в порядке или имеет в нем озорные слова. Ответ приведен в форме JSON.getJSON не работает, 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 BLOCK, которые рассылает/Считывает ОТВЕТ:

$('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"]}}] 

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

+0

Пожалуйста, сохраняйте Юрис идемпотент. Даже аякс. Это должно использоваться '$ .post'. Когда вы этого не сделаете, это на самом деле нарушение спецификации HTTP. Http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe –

ответ

3

строки запроса параметр «callback=?» вступает в игру, если вы используете межсайтовый скриптинг или JSONP, если вы отправляете один и тот же сервер, вам не нужно использовать.

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

Пример:

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

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

Вот more info on jsonp

+0

Возможно, это было сделано ...просто сделал быстрый тест и получил что-то обратно. Магазин закрывается, поэтому я буду работать над этим завтра и попытаюсь проверить, прежде чем я буду отмечать как ответ. – KRH

+0

Да, это так, хотя есть другие вызовы с использованием обратного вызова и не сбой ... не знаю, почему это сделал. Django генерирует ответ. В любом случае, сценарий не должен быть crossdomain, поэтому я отмечу это как ответ. Спасибо! – KRH

1

Можете ли вы вручную позвонить в службу поддержки без каких-либо ошибок? Вы пробовали использовать 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

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

0

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

$.ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){ 
    console.log(thrownError); 
}); 
+0

Пробовал это, к сожалению, к сожалению. – KRH

+0

Являются ли эти x-доменные URL-адреса? – redsquare

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