Вызовы JSON не работают после переключения типа на POST вместо GET

#jquery #json #jayrock

#jquery #json #jayrock

Вопрос:

Я использовал фреймворк JayRock с ASP.NET чтобы вернуть JSON, который используется через javascript. Все работало нормально, пока я не изменил вызов $.ajax с GET на POST. После этого изменения я теперь получаю эту ошибку.

 {"id":null,"error":{"name":"JSONRPCError","message":"Missing value.","errors":[{"name":"JsonException","message":"Missing value."}]}}
  

Вот мой javascript:

     var tmp = '{ "assID": 52 }';
    var tmpObj = $.parseJSON(tmp);


$.ajax
({
    type: "POST",
    url: '/jsonC.ashx/tester',
    dataType: 'json',
    data: tmpObj,
    async: true,
    contentType: 'application/json',
   success: function (result) {
        console.log(JSON.stringify(result));
    }
})
  

У кого-нибудь есть идеи?
Заранее спасибо.

Комментарии:

1. Ожидает ли этот URL получения post? Если это только поиск значений GET, то вам все равно придется передавать параметры в URL.

2. Та же мысль, что и у Marc, но правильнее всего получить параметры на стороне сервера из POST, а не отправлять их избыточно в URL.

3. Я не думаю, что понимаю, я использую Jayrock, я предполагаю, что он обрабатывает разницу для меня? Кажется, я не могу найти никаких настроек.. Я весь день гуглил эту проблему

Ответ №1:

Вот определение того, что следует делать:

 var dataString = '{ "assID": 52 }'; 
var postData = $.parseJSON(dataString);
var response;
$.ajax({
  type: 'POST',
  url: '/jsonC.ashx/tester',
  contentType: 'application/json',
  data: JSON.stringify(postData),
  dataType: 'json',
  success: function(data) {
      //do something for success if you want. If your response is JSON:
      response = $.parseJSON(data)
  },
  error: function(data) {
      //do somtething for error if you want. If your response is JSON:
      response = $.parseJSON(data)
  }
});
  

Комментарии:

1. на самом деле я пытался отправить данные, но упростил код, просто чтобы попытаться получить ответ от post .. вот данные .. var tmp = ‘{ «assID»: 52 }’; var tmpObj = $.parseJSON(tmp); затем в вызове ajax.. data: tmpObj,

2. добиваюсь прогресса … теперь я получаю ошибку сервера, которую я вижу с помощью firebug.. «Уведомления еще не поддерживаются». Проблема с Jayrock?

3. Ваша проблема в том, что: If the ID is not there or was not set then this is a notification request from the client that does not expect any response. Right now, we don't support this. отсюда: java2s.com/Open-Source/CSharp/Development/Jayrock/Jayrock /…

4. таким образом, это означает, что вы должны установить id на что-то. Я имею в виду что-то вроде: var dataString = ‘{ «id»: 1, «assID»: 52 }’;

5. О, отлично @kamaci Итак, я включил идентификатор, он жаловался на отсутствие вызова метода, поэтому я включил имя метода .. теперь его сообщение: «Несоответствие количества параметров». … есть ли шанс, что вы знаете синтаксис для включения этого параметра.. все, что я пробовал, потерпело неудачу.. Спасибо!

Ответ №2:

Вам нужно добавить свои параметры в качестве данных в значения конфигурации…

 $.ajax
({
    type: "POST",
    url: '/jsonC.ashx/tester',
    dataType: 'json',
    data: {id: some_value, other_var: 'some string'}
    async: true,
    contentType: 'application/json',
   success: function (result) {
        console.log(JSON.stringify(result));
    }
})
  

просто замените содержимое данных вашими фактическими значениями. В нынешнем виде вы размещаете на странице, но не отправляете переменные post.