下面的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中也一樣。
我也意識到我應該使用「var」在回調中聲明變量。不使用var已經導致它們進入全局範圍,並且保持了以前回調的相同值。
無論如何,我正在回答這個問題,因爲原來的問題已經得到解答。
對不起,但我可以請你給我看一個如何直接訪問數據的例子嗎?我編輯了我的帖子以顯示返回消息的示例 – aDvo
我會添加一個檢查以查看數據格式是否正確:status =(parseddata.status && parseddata.status!== null)? parseddata.status:null; – frenchie
@aDvo我的答案顯示瞭如何直接訪問數據,使用'parseddata.status'等。 – Barmar