2014-06-29 119 views
1

下面的ajax調用提交表單數據並從服務器接收反饋作爲json編碼的對象/數組。適用於IE10以及最新版本的FF和Chrome。IE8和jquery.post ajax調用不起作用

在IE8中不起作用。使用IE8開發人員工具,我可以看到json數組實際上是從我的服務器返回到我的瀏覽器。然而,在「$ .each」語句的行中,它完全跳過了該循環,就好像ajax響應中沒有數據。

有誰知道這個問題是什麼?我讀過其他論壇的一些建議使用datatype = json,但不知道如何適應我的代碼。其他人建議將.post更改爲.ajax。但是我不想在我真正理解爲什麼IE8在這方面失敗之前做出改變。從服務器返回的響應

$.post("<?php echo Router::url(array('controller'=>'Bookings','action'=>'saveBooking_ajax')); ?>", $(".reservationform").serialize(), function() { 

      }) 
       .done(function(data) { 

        parseddata = JSON.parse(data); 

        //IE8 totally skips this next part even if parseddata has data 
        $.each(parseddata, function(key, value) { 
         if (key == "status") status = value; 
         if (key == "message") message = value; 
         if (key == "failuretype") failuretype = value; 
         if (key == "bookingref") bookingref = value; 
        }); 

例如:

{"status":true,"failtype":"USER","message":"","timeslots":[[{"18:00:00":"6:00 pm"},{"18:10:00":"6:10 pm"},{"18:20:00":"6:20 pm"},{"18:30:00":"6:30 pm"},{"18:40:00":"6:40 pm"},{"19:20:00":"7:20 pm"},{"19:30:00":"7:30 pm"},{"19:40:00":"7:40 pm"},{"20:20:00":"8:20 pm"},{"20:30:00":"8:30 pm"},{"20:40:00":"8:40 pm"}]]} 

ANSWERED使用@BARMAR ANSWER

我已經改變使用 「JSON」 參數設置爲我的部分代碼。通話後。

我相信這會自動將返回分析爲json對象,因此我不必在done()函數中調用JSON.parse(data)。無論如何,JSON.parse(數據)在IE8中不起作用。請注意,我沒有嘗試使用Barmar建議的「$ .parseJSON()」。

  //parseddata = JSON.parse(data); 

此外,我再直接訪問返回的對象變量suggesed:

  status = data.status; 
      message = data.message; 
      failtype = data.failtype; 
      timeslots = data.timeslots; 

這似乎在大多數情況下工作。但在IE8中對於變量「狀態」不起作用!因爲變量「status」在頁面加載時由於某種原因而被鍵入爲沒有值的字符串,並且無法傳遞data.status的值,該值是一個真正的非字符串布爾值。因此,變量「地位​​」保持爲「」。其他變量似乎很好。

這很奇怪,因爲它適用於其他現代瀏覽器,變量「status」已經被鍵入爲一個空字符串「」,儘管data.status = true,它不知何故成功地將值分配給「status」變量「狀態」是布爾值「真」的字符串版本。

對不起,如果這是很長的囉嗦,但儘管IE8s無法純粹的布爾值的字符串變量,我想我應該停止使用「狀態」作爲變量名稱的事實,某個地方未知其已被鍵入和初始化爲「」。

請參閱Firefox中的調試屏幕,其中var「status」神祕地預先鍵入爲空字符串。在IE中也一樣。

enter image description here 我也意識到我應該使用「var」在回調中聲明變量。不使用var已經導致它們進入全局範圍,並且保持了以前回調的相同值。

無論如何,我正在回答這個問題,因爲原來的問題已經得到解答。

回答

3

我不認爲IE8有JSON.parse()。使用$.parseJSON()。或者將`datatype參數指定爲`$。崗位:

$.post("url", $(".reservationform").serialize, "json") 
    .done(function(parseddate) { 
     status = parseddata.status; 
     message = parseddata.message; 
     failuretype = parseddata.failuretype; 
     bookingref = parseddata.bookingref; 
}); 

你也不需要使用$.each()讀值出的數據。這是一個Javascript對象,直接訪問屬性。

+0

對不起,但我可以請你給我看一個如何直接訪問數據的例子嗎?我編輯了我的帖子以顯示返回消息的示例 – aDvo

+0

我會添加一個檢查以查看數據格式是否正確:status =(parseddata.status && parseddata.status!== null)? parseddata.status:null; – frenchie

+0

@aDvo我的答案顯示瞭如何直接訪問數據,使用'parseddata.status'等。 – Barmar