Jump to content
  • 0

jQuery.ajax получение данных Post. На сервере метод без параметра. Ошибка в IE


Alexys
 Share

Question

Запрос данных с сервера с использованием JQuery-Аякс запроса (ajax)
 
Код на js следующий:
jQuery.ajax({            type: "POST",            url: Url.Action("GetMyList", "ServerController"),            contentType: "application/json; charset=utf-8",            dataType: "json",            data: JSON.stringify({}),            success: function(data){},            error: function(data){}});

На серверной стороне:

1. Если метод без параметра, то:

public class ServerController : Controller
{
[HttpPost]
public NJsonResult GetReportPeriodList()
{
try
{
var list = MySqlAdapter.GetList();
return new NJsonResult { Data = list };
}
catch (Exception e)
{
return new NJsonResult
{
Data = new
{
error = true,
msg = "Ошибка получения списка."
}
};
}
}
}
Возникает ошибка в IE (10 версия), в консоли (в дебаггере js (в метод error: function(data){}) возвращается структура, и в одном поле просто "error"): 
SCRIPT7002: XMLHttpRequest: Network Error 0x2efe, Could not complete the operation due to error 00002efe.
Хром отрабатывает успешно!
В итоге нет результата!

 

2. Если же в метод добавим параметр:

public class ServerController : Controller
{
[HttpPost]
public NJsonResult GetReportPeriodList(string code)
{
try
{
var list = MySqlAdapter.GetList();
return new NJsonResult { Data = list };
}
catch (Exception e)
{
return new NJsonResult
{
Data = new
{
error = true,
msg = "Ошибка получения списка."
}
};
}
}
}

То Всё проходит в IE успешно!!! Как так?

 

Подскажите как быть? Как использовать методы без параметров. Получить просто какое-либо значение, массив объектов, данные.

 

 

 

 

 

 

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Не принципиально, массив объектов возвращается.

.net C#, контроллер наследуется от Controller от Mvc

Даже просто

Метод вернет массив объектов:

List<MyObject> array = new List<MyObject>();

array.Add(new MyObject() { id = 1, value = "123" });

array.Add(new MyObject() { id = 2, value = "456" });

 

и возвращаем return array;

 

List<MyObject> list = MySqlAdapter.GetList();

return new NJsonResult { Data = list };

 

По существу, сталкивались ли с такими ошибками или нет?

 

В том то и парадокс, что добавил параметр в метод, проблема в ИЕ 10 перестала наблюдаться!

 

В хроме изначально не наблюдается.

 

Попробовали у соседа в Виндоуз 8.1  в ИЕ 11 - не наблюдаетсЯ, в эмуляции ИЕ 10 - не наблюдается. 

У меня же в ИЕ 10 наблюдается. Добавил параметр (заглушку) проблема исчезла.

Link to comment
Share on other sites

  • 0

А если без аякса? Я в .net совсем не разбираюсь, но нельзя ли зайти напрямую по урлу и посмотреть что отдаётся и отдаётся ли вобще?

 

В интернетах пишут, что такая ошибка может возникать если в JSON находится запрещённый символ или проблемы с кодировкой. Опять же пустой ответ сервера - тоже не считается валидным JSON. Ещё вот такая цитата:

 

We had similar problems I tried to fix by setting charset as noted previous comment it did not help. Our application was doing ajax request every 60 seconds and our webserver nginx was sending keep-alive timeout to be 60 seconds.

We have fixed the problem seeting keep alive timeout to be 75 seconds and we did not see the problem anymore.

What we believe happened was similar to this:

  • IE starts ajax request after 60 seconds using keep alived connection
  • in the same time nginx knows that keep-alive timeout is ignored by IE so it starts tcp connection close process (in case of FF, Chrome this is started by client)
  • IE gets the close connection request it previously sent request to, since this is not expected by IE it throwns error and aborts the work
  • nginx seems still to be responding to the request even though the connection is closed.

А вот решение под ASP:

 

I had this error for some time and found a fix. This fix is for Asp.net application, Strange it failed only in IE non compatibility mode, but works in Firefox and Crome. Giving access to the webservice service folder for all/specific users solved the issue.

Add the following code in web.config file:

 

<location path="YourWebserviceFolder">  <system.web>    <authorization>     <allow users="*"/>    </authorization>  </system.web></location>
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Xandr555
      Добрый вечер! Подскажите.. Не работает форма, заполнил поля php mail, некоторые синтаксисы не знаю. Код ниже. Скрипт пробовал в хеде и в выложенной вариации, не идет сообщение. Заранее спасибо.
      <!DOCTYPE html> <html> <head> <title>index.html</title> <meta charset="utf-8"/> </head> <body> <form class="form-horizontal" target="_blank" method="post" id="form" enctype="multipart/form-data"> <div class="form-group"> <label class="col-sm-2 control-label">Ф.И.О.:</label> <div class="col-sm-10"> <input class="form-control" type="text" name="name" placeholder="Имя" required /> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Телефон:</label> <div class="col-sm-10"> <input class="form-control" type="text" name="number" pattern="^[0-9]{11}$" placeholder="Телефон" required /> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Эл. почта:</label> <div class="col-sm-10"> <input class="form-control" type="email" name="email" placeholder="E-mail" required /> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <textarea class="form-control" rows="3" name="message" placeholder="Ваше сообщение" required></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button class="btn btn-default">Отправить</button> <label class="sucsses">СООБЩЕНИЕ ОТПРАВЛЕНО</label> </div> </div> </form> <script> $("#form").submit(function() { $.ajax({ type: "POST", url: "http://mysite.ru/mail9.php", data: $(this).serialize() }).done(function() { $(this).find("input").val(""); $(".sucsses").fadeIn("1500"); setTimeout(function() { $(".sucsses").fadeOut("1500"); }, 2500); $("#form").trigger("reset"); }); return false; }); </script> </body> </html> <!DOCTYPE html> <html> <head> <title>mail9</title> <meta charset="utf-8"/> </head> <body> <?php $recepient = "mymail@mail.ru"; $name = trim($_POST["name"]); $number = trim($_POST["number"]); $email = trim($_POST["email"]); $message = trim($_POST["message"]); $message = "Имя: $name \nТелефон: $number \nЕmail: $email \nСообщение: $message"; $headers = 'Content-type: text/plain; charset="utf-8"'; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "From: mymail@mail.ru\r\n"; $headers .= "Reply-To: mymail@mail.ru\r\n"; $pagetitle = "Сообщение с АЛЬЯНС-сайта"; mail($recepient, $pagetitle, $message, $headers); ?> </body> </html>  
    • By ioprst
      Привет. Проблема в следующем. Есть одна страничка, на которой две вкладки, на второй вкладке исполняется js. В firefox'e все как надо, запускаю localhost и на какой-бы вкладке изначально я не оказался, анимация svg (js выполняет) работает, после перехода с 2ой вкладки на первую и обратно, анимация также работает. Что происходит в Хроме: Если я запускаю страницу (перезапускаю) и оказываюсь на второй вкладке, то анимация есть, стоит перейти с 2ой вкладки на 1ю и обратно, анимация пропадает. Суть в том, что в хроме при любом переходе между вкладками js перестает работать, либо проблема в XMLHttpRequest. Привожу js код, который исполняется на второй вкладке:
      var svgDoc; var xhr; var c1_boolFlow = false; window.onload = function() { svgDoc = document.getElementById("cns2Id").contentDocument; var timer = setInterval(anim, 100); var timerPost = setInterval(setPost, 100); } function anim() { c1anim(); } // Функция отправки запроса function setPost() { xhr = new XMLHttpRequest(); var send = ["c1_boolFlow"]; xhr.open("POST", 'cgi-bin/getVars.py', true); xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8') xhr.onreadystatechange = onResponse; xhr.send(send); } // Функция обработки ответа function onResponse() { if (xhr.readyState != 4) { return; } var respJSON = JSON.parse(xhr.responseText); c1_boolFlow = respJSON.c1_boolFlow; } ...  
    • By Seregka174
      Здравствуйте о виликие гуру помогите навичку существуют такая форма отправки:
      <div class="contact-form-wrapper"> <form action="contact/mail.php" method="post" id="contact-form"> <div class="row"> <div class="col-sm-6"> <div class="form-group"> <input type="text" id="contact-name" name="contact-name" placeholder="Имя*" required /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="email" id="contact-email" name="contact-email" placeholder="Email*" required /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="tel" id="contact-phone" name="contact-phone" placeholder="Телефон" /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="text" id="contact-subject" name="contact-subject" placeholder="Тема" /> </div> </div> <div class="col-sm-12"> <div class="form-group"> <textarea name="contact-message" id="contact-message" placeholder="Сообщение*" required rows="7"></textarea> </div> </div> </div> <div class="form-group"> <button type="submit" class="button border red">Отправить</button> </div> <div id="contact-loading" class="alert alert-info form-alert"> <span class="icon"><i class="fa fa-info"></i></span> <span class="message">Loading...</span> </div> <div id="contact-success" class="alert alert-success form-alert"> <span class="icon"><i class="fa fa-check"></i></span> <span class="message">Success!</span> </div> <div id="contact-error" class="alert alert-danger form-alert"> <span class="icon"><i class="fa fa-times"></i></span> <span class="message">Error!</span> </div> </form> </div> <!-- end .contact-form-wrapper --> Вот скрипт contact-form
      /*========== Contact Form ==========*/ $('#contact-form').on('submit', function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-loading').fadeIn(); if (validateEmail($('#contact-email').val()) && $('#contact-email').val().length !== 0 && $('#contact-name').val().length !== 0 && $('#contact-message').val().length !== 0) { var action = $(this).attr('action'); $.ajax({ type: "POST", url : action, data: { contact_name: $('#contact-name').val(), contact_email: $('#contact-email').val(), contact_phone: $('#contact-phone').val(), contact_subject: $('#contact-subject').val(), contact_message: $('#contact-message').val() }, success: function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-success .message').html('Отправлено!'); $('#contact-success').fadeIn(); }, error: function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Простите, ошибка отправки!.'); $('#contact-error').fadeIn(); } }); } else if (!validateEmail($('#contact-email').val()) && $('#contact-email').val().length !== 0 && $('#contact-name').val().length !== 0 && $('#contact-message').val().length !== 0) { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Пожалуйста введите корректный email.'); $('#contact-error').fadeIn(); } else { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Please fill out all the fields.'); $('#contact-error').fadeIn(); } return false; }); Помогите написать mail.php что бы форма и письма корректно отправлялись я в этом нифига не понимаю но очень хочется что бы на моем первом сайте заработало, очень прошу Вашей помощи!
    • By alex_web64
      Здравствуйте.
      Мне нужно на странице сохранить некоторые данные, чтобы в будущем подгрузить их  помощью xhr. Каким образом это лучше сделать в плане производительности? Создать скрытый div  с data-* параметрами, или есть лучшее решение?
    • By itisme
      Доброго времени суток. Только начал осваивать html, возникла проблема с передачей файла через веб-форму. Попытался ее локализовать и представить вам.
       
      Имеется html страница с простейшим кодом:
      <!DOCTYPE html><html><head><title>Главная страница</title><meta charset="utf-8"></head><body>    <form name="upload"  method="POST" enctype="multipart/form-data"><input type="text" name="filename" /><br><input type="file" name="filecontent" /><br><input type="submit" value="OK" /></form> </body>Сервлет обрабатывающий страницу получает этот запрос, видит в нем текстовое поле "filename" и введенные в него данные, но совсем не видит поле "filecontent".
       
      Судя по отладчику хрома, в отправляемом post-запросе просто отсутствует содержимое файла, хотя по всем прочитанным мной примерам использования input-file'а оно должно там быть. Выглядит это примерно так:
      ------WebKitFormBoundaryqbhPyhN96YUAbhF2 Content-Disposition: form-data; name="filename" myfile ------WebKitFormBoundaryqbhPyhN96YUAbhF2 Content-Disposition: form-data; name="filecontent"; filename="test.txt" Content-Type: text/plain ------WebKitFormBoundaryqbhPyhN96YUAbhF2--  
      Остальные браузеры запрос не видят совсем, либо я не разобрался с их отладчиками.
       
      Видимо я где-то напортачил в коде страницы, забыв что-то дописать. Прошу подсказать где и что.
       
       
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy