2016-05-05 4 views
2

Здравствуйте, у меня есть следующие данные через ajax для MVC-контроллера. Он работает отлично, когда он работает в IE, но получает сообщение об ошибке при запуске Firefox. Я попытался изменить так много вещей (добавив dataTypes, contentType ... и так далее). Большинство из них приводит к тому, что данные не отправляются через IE.Ajax успешно отправляет данные в IE, но не в Firefox

function sendData() { 
    var currData = new Array(); 
    var elements = document.getElementById("formID").elements; 
    for (var i = 0, element; element = elements[i++];) { 
     if (element.value != "Submit Query") { 
      if (element.value != "") { 
       currData.push(element.value); 
      } 
     } 
    } 
    var finData = {values: currData}; 
    $.ajax({ 
     type: "POST", 
     url: "home/sendcurr", 
     data: finData, 
     traditional: true, 
     success: function (recData) { 
      populateObjData(recData); 
     }, 
     error: function() { 
      alert("error"); 
     } 
    }); 
} 

В контроллере я получаю данные, как:

List<String> values 

И возвращать следующие данные обратно Аякса на успех.

var jsonData = new JavaScriptSerializer().Serialize(_object); 
return jsonData; 

Опять же это прямо сейчас отлично работает в IE, но не в Firefox! Любая помощь очень ценится!

+0

Что такое «традиционный: истинный» здесь? –

+0

какая ошибка вы получаете в firefox? –

+0

@PraveenKumar это был единственный способ, который я понял, чтобы читать данные, полученные контроллером в IE, иначе он просто дал мне «null» вместо списка значений в массиве. – Baraa

ответ

1

После проверки коды с IE11 + Chrome50 annd FF46 я получил следующие результаты, если использовать или не the traditional style of param serialization.

traditional: true: 
Chrome --> "["values=1","values=2","values=Submit%20Query"]" 
FF  --> "["values=1","values=2","values=Submit%20Query"]" 
IE  --> "[values=1,values=2,values=Submit%20Query]" 
traditional: false: 
Chrome --> "["values%5B%5D=1","values%5B%5D=2","values%5B%5D=Submit%20Query"]" 
FF  --> "["values%5B%5D=1", "values%5B%5D=2", "values%5B%5D=Submit%20Query"]" 
IE  --> "[values%5B%5D=1,values%5B%5D=2,values%5B%5D=Submit%20Query]" 

Использование вместо serialize результатов:

Chrome: --> "["firstName=1","lastName=2"]" 
FF  --> "["firstName=1", "lastName=2"]" 
IE:  --> "[firstName=1,lastName=2]" 

Для если проблем Я написал комментарий об ошибке.

Таким образом, я могу предложить вам сократить строки кода и написать что-то вроде:

function sendData() { 
 
    var finData = $('#formID').serialize(); 
 
    $.ajax({ 
 
    type: "POST", 
 
    url: "z.html", 
 
    data: finData, 
 
    success: function (recData) { 
 
     //populateObjData(recData); 
 
     alert('success'); 
 
    }, 
 
    error: function() { 
 
     alert("error"); 
 
    } 
 
    }); 
 
} 
 
$(function() { 
 
    $('input[type="submit"]').on('click', function(e) { 
 
    e.preventDefault(); 
 
    sendData(); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script> 
 

 

 
<form id="formID" action="z.html" method="post"> 
 
    <input name="firstName" value="1"> 
 
    <input name="lastName" value="2"> 
 
    <input type="submit" value="Submit Query"> 
 
</form>

Если вы заинтересованы, чтобы отладить код JQuery вы можете посмотреть на:

jQuery.param = function(a, traditional) { 
+0

спасибо за углубленный анализ, это помогает понять больше! – Baraa

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