2016-05-05 13 views
2

こんにちは私は以下のデータを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; 

もう一度これは今でもFirefoxではなくIEでは完全に機能しています。 ご迷惑をおかけして申し訳ありません。

+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

関連する問題