2012-03-17 2 views
0

Я пытаюсь использовать Dojo для публикации на моем сервере. Сервер возвращает ответ JSON (я отлаживал его и знал, что он возвращает разумное значение), но я просто получаю «Синтаксическую ошибку» в консоли Javascript, когда он возвращается. Есть идеи?xhr.post не получает ответ JSON

function submitStatusUpdate() { 
    dojo.xhr.post({    
      form:"statusUpdateForm", 
      handleAs: "json", 
      load: function(data){ 
       alert('Saved with id ' + data.id); 
      }, 
      error: function(err, ioArgs){ 
       // again, ioArgs is useful, but not in simple cases 
       alert('An error occurred'); 
       console.error(err); // display the error 
      } 
    });  
} 

Я также попробовал, как этот

function submitStatusUpdate() { 
    var posted = dojo.xhr.post({    
      form:"statusUpdateForm", 
      load: function(data){ 
      }, 
      error: function(err, ioArgs){ 
       // again, ioArgs is useful, but not in simple cases 
       console.error(err); // display the error 
      } 
    });  
    posted.then(function(response){ 
     alert('returned ' + response); 
    }); 
} 

Но ответ, который печатается в моей тревоге просто кажется HTML для всей моей страницы. Я ожидаю объект JSON. Я изо всех сил пытаюсь найти простой пример, который рассказывает мне, как отправить форму, а затем функцию обратного вызова, которая читает ответ.

Благодаря

EDIT (благодаря Ричарду для руководства)

Это рабочая версия.

<script language="Javascript"> 

dojo.require("dijit.form.Button"); 
dojo.require("dijit.form.TextBox"); 
dojo.require("dijit.form.CheckBox"); 

function sendForm(){ 

    var form = dojo.byId("myform"); 

    dojo.connect(form, "onsubmit", function(event){ 
    // Stop the submit event since we want to control form submission. 
    dojo.stopEvent(event); 

    // The parameters to pass to xhrPost, the form, how to handle it, and the callbacks. 
    // Note that there isn't a url passed. xhrPost will extract the url to call from the form's 
    //'action' attribute. You could also leave off the action attribute and set the url of the xhrPost object 
    // either should work. 
    var xhrArgs = { 
     form: dojo.byId("myform"), 
     load: function(data){ 
     // As long as the server is correctly returning JSON responses, the alert will 
     // print out 'Form posted. ' and then the properties and values of the JSON object returned 
     alert("Form posted." + data); 
     }, 
     error: function(error){ 
     // We'll 404 in the demo, but that's okay. We don't have a 'postIt' service on the 
     // docs server. 
     alert("error"); 
     } 
    } 
    // Call the asynchronous xhrPost 
    alert("Form being sent..."); 
    var deferred = dojo.xhrPost(xhrArgs); 
    }); 
} 
dojo.ready(sendForm); 

</script> 

Это (вид), как выглядит моя форма. Это будет работать в любом случае (моя реальная форма намного больше). Интересно, я должен был изменить свой обычный [тип ввода = «отправить» ...] тег в кнопку [...], чтобы заставить его работать правильно

<form method="post" id="theform" action="postIt"> 
    <input value="Some text" name="formInput" type="text"/>  
    <input name="checkboxInput" type="checkbox"/> 
    <button id="submitButton" type="submit">Send it!</button> 
</form> 
+0

А, я только что заметил что-то глупое, что я делаю. Я помещаю событие onClick, которое вызывает указанную выше функцию в кнопке отправки в форме, так что, вероятно, она будет отправлена ​​дважды. Действие формы (url) - это http: // myserver/myapp/statusupdates/submit. Это приложение Java, и я могу вставить в него точку останова и увидеть, что она вызывается, но теперь я задаюсь вопросом, не ошибаюсь ли я в этом. Я думал, что вышеупомянутые функции были вызваны при отправке формы. Не думайте, что вы знаете хороший пример где-то подавать форму, а затем читать ответ JSON? Спасибо – Richard

+0

Спасибо за этот пример, теперь это начинает иметь смысл. Я даю ему попробовать, ура – Richard

+1

Получил это наконец! Вы были правы, моя конфигурация сервера была не совсем правильной: я использую Spring MVC, но у меня не было Джексона как зависимость от maven. Как только я добавил это, мой метод действительно вернул JSON обратно в функцию «load». Я использовал приведенный вами пример (первый на странице в ссылке), и теперь он отлично работает. Если вы создадите ответ на мой вопрос (а не в комментариях), я буду отмечать его как правильно, чтобы вы получили кредит. Спасибо, миллион, это меня медленно сбило с толку :) – Richard

ответ

1

ошибка синтаксиса JavaScript на разборе XMLHttpRequest ответ, как правило, указывает неверные данные с сервера. Мой любимый инструмент для мониторинга трафика XMLHttpRequest - Firebug. Он разбирает JSON, поэтому, если что-то не так, вы сразу узнаете.

Как только вы определили, что данные JSON с сервера действительны, просмотрите следующие example from the Dojo documentation. Я думаю, что он делает то, что вы пытаетесь сделать.

+0

Nice one :) Еще раз спасибо. – Richard

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