2013-08-23 2 views
0

У меня есть следующий код jQuery ajax, который вызывает веб-сервис ASP.NET для сохранения данных в базе данных.Ошибка веб-службы в jquery при использовании Internet Explorer 10

function SaveDataToParty() { 
      var mode = "Save"; 
      var srno = 0; 
      var partyname = $("#p1").val(); 
      var partyemail = $("#p2").val(); 
      var partyphone = $("#p3").val(); 
      var partyaddress = $("#p4").val(); 
      var webMethod = "../Service/DatabaseHandling.asmx/SaveDataToParty"; 
      var parameters = "{mode:'" + mode + "',srno:'" + srno + "',partyname:'" + partyname + "',partyemail:'" + partyemail + "',partyphone:'" + partyphone + "',partyaddress:'" + partyaddress + "'}"; 
      alert(parameters); 
      $.ajax({ 
       type: "POST", 
       url: webMethod, 
       async:false, 
       data: JSON.stringify(parameters), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        alert(msg.d); 
       }, 
       error: function (e) { 
        alert(e.statusText); 
       } 
      }); 
     } 

Этот вызов следующий метод WebService в asp.net

<WebMethod()> _ 
Public Function SaveDataToParty(mode As String, srno As String, partyname As String, partyemail As String, partyphone As String, partyaddress As String) As Boolean 
    'this will start connection and set transaction to it 
    Dim cnstr As String = String.Empty 
    cnstr = System.Configuration.ConfigurationManager.ConnectionStrings("DPMTConnectionString").ConnectionString 
    Dim cn As New SqlConnection(cnstr) 
    Dim tran As SqlTransaction 
    cn.Open() 
    tran = cn.BeginTransaction 
    Try 
     'this will handle sp coding 
     Dim dcmd As New SqlCommand 
     dcmd.Connection = cn 
     dcmd.CommandType = CommandType.StoredProcedure 
     'sp execution for party entry 
     If mode = "Save" Then 
      dcmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "ADD" 
      dcmd.Parameters.Add("@srno", SqlDbType.Int).Value = 0 
     End If 
     If mode = "Update" Then 
      dcmd.Parameters.Add("@mode", SqlDbType.NVarChar).Value = "UPDATE" 
      dcmd.Parameters.Add("@srno", SqlDbType.Int).Value = srno 
     End If 

     dcmd.Parameters.Add("@partyname", SqlDbType.NVarChar).Value = partyname 
     dcmd.Parameters.Add("@partyemail", SqlDbType.NVarChar).Value = partyemail 
     dcmd.Parameters.Add("@partyphone", SqlDbType.NVarChar).Value = partyphone 
     dcmd.Parameters.Add("@partyaddress", SqlDbType.NVarChar, 500).Value = partyaddress 

     dcmd.CommandText = "sp_add_update_delete_party" 
     dcmd.Transaction = tran 
     dcmd.ExecuteNonQuery() 
     tran.Commit() 
     Return True 
    Catch ex As Exception 
     Return False 
    Finally 
     cn.Close() 
    End Try 
End Function 

генерируется ошибка только в Internet Explorer 10. Ошибка «Недопустимый вызов веб-службы, отсутствующее значение для параметра: \ u0027mode \ u0027»

Он отлично работает в Google Chrome.

Любое решение?

EDIT 1

Я обновил это с JSON.stringify и асинхронным: ложным, но до сих пор никакого успеха с IE10.

EDIT 2

В инструментах разработчика IE10, в закладке сети, отображается следующая информация.

Key Value 
Request POST /hemal/ASPNET/DPMT/Service/DatabaseHandling.asmx/SaveDataToParty HTTP/1.1 
Accept application/json, text/javascript, */*; q=0.01 
Content-Type application/json; charset=utf-8 
X-Requested-With XMLHttpRequest 
Referer http://localhost/hemal/ASPNET/DPMT/ADMIN/Purchase_Add.aspx 
Accept-Language en-IN,en-GB;q=0.8,en;q=0.5,gu;q=0.3 
Accept-Encoding gzip, deflate 
User-Agent Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) 
Host localhost 
Content-Length 0 
DNT 1 
Connection Keep-Alive 
Cache-Control no-cache 
Cookie ASP.NET_SessionId=mhp35fbfn3vzoalqvdild5hb; loginstatus=ok 

Я шокирован, почему длина контента равна 0. Это означает, что ничего не отправлено.

+0

вы можете получить сообщение Данные из IE. используя скрипач или что-то. Если вы разместите эти данные здесь. Мы получим лучший обзор. – Athul

+0

@AthulKSurendran, я обновил свой код с помощью EDIT 2. Пожалуйста, см. – Hemal

+0

. Я не думаю, что вы используете строку правильно? Вы должны подстроить объект. См. Мой ответ. – Brett

ответ

0

Я не могу воспроизвести его; Однако, одна вещь, которая кажется мне подозрительным является то, что вы stringifying свой собственный JSON, то есть,

var parameters = "{mode:'" + mode + "',srno:'" + srno + "',partyname:'" + partyname + "',partyemail:'" + partyemail + "',partyphone:'" + partyphone + "',partyaddress:'" + partyaddress + "'}"; 

Существует разница между реализацией и реализацией json2.js. Вы могли бы написать:

JSON.stringify({ 
      mode: mode, 
      srno: srno, 
      partyname: partyname, 
      partyemail: partyemail, 
      partyaddress: partyaddress 
     })); 

См:

http://jsfiddle.net/DwTge/9/

Обратите внимание на разницу в кавычки имен Param?

+0

Основная проблема с IE10 заключается в том, что в заголовках запросов ничего нет , длина содержимого равна 0. В других браузерах заголовок запроса заполняется содержимым, которое нужно отправить. См. Раздел EDIT 2 – Hemal

+0

. Это отлично работает с Google Chrome и Firefox. – Hemal

+0

. Я сделал так, как вы сказали, все еще не успешен в IE10. – Hemal

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