2012-05-23 29 views
3

我有這個jQuery腳本,它將一個用戶名密碼發送到一個PHP文件,該文件檢查該用戶是否存在並返回一個JSON用戶對象。在非IE瀏覽器中工作正常,但IE失敗。

的奇怪的事情是,IE「螢火蟲說:」一切都很好,但PHP腳本犯規收到任何瓦爾...

這是請求正文:

用戶名= johanderowan &口令= 1234

這些是請求頭(I左出去SECURIT幾個瓦爾ÿ原因):

請求= POST /1.0/account/login.json HTTP/1.1
接受= /
產地= [DEVURL]
接受語言= NL-NL
用戶代理= Mozilla/5.0(兼容的;可用的);用戶代理= Mozilla/5.0(兼容; MSIE 9.0; Windows NT 6.1; Win64平臺; 64;三叉戟/ 5.0)
主機= [DEVURL]
的Content-Length = 66
連接保持 緩存控制無緩存

響應體是(前三個空數組是$ _GET ,$ _ POST和$ _REQUEST):

陣列 ( )
陣列 ( )
陣列 ( )
{ 「狀態」: 「錯誤」, 「消息」: 「未指定的用戶名或口令。」, 「httpCode」:500}

這是請求腳本:

$('.mobyNowLoginForm form').bind('submit', function(){ 
    var username = $(this).find('.username').val(); 
    var password = $(this).find('.password').val(); 
    $.post('[url]/1.0/account/login.json', { 
     username: username, 
     password: password 
    }, function(response) { 
     // do something 
    }, "JSON"); 
    return false; 
}); 

我不知道在什麼都可能是錯的... ...

+1

你是如何得到HTTP響應頭和正文的? – flowfree

+1

IE中的任何錯誤? – ManseUK

+3

'var_dump(file_get_contents(「php:// input」));'show you?請求標頭中的「Content-Type」是什麼? – Wrikken

回答

1

看來,IE不跨域請求發送正確conent型。內容類型始終設置爲「text/plain」。通過解析PHP http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

我們解決了這個服務器上://輸入字符串,並設置此爲$ _ POST瓦爾

瞭解更多關於這個缺點在我這篇文章。

if ($_SERVER['REQUEST_METHOD'] == 'POST' && count($_POST) == 0) { 
    $postData = file_get_contents('php://input'); 
    $postVars = explode('&', $postData); 
    foreach ($postVars as $postVar) { 
     list($key, $var) = explode('=', $postVar); 
     $_POST[$key] = $var; 
    } 
} 
+1

不錯,我會使用'parse_str($ postData,$ _ POST);'在這個例子中,對於像'array [] = foo&array [] = bar'這樣的輸入。 – Wrikken

0

有你試圖將緩存設置爲false。我有一個類似的問題,並修復它:

$.ajax({ 
    type: 'POST', 
    url: '[url]/1.0/account/login.json', 
    dataType: 'json', 
    data: { 
     username: username, 
     password: password 
    }, 
    cache: false, 
    success: function() { 
     // Do something 
    } 
}); 

我希望這可以幫助你!

斯特芬

編輯

的問題也可能是在您要求的網址。您嘗試撥打.json文件。您可以嘗試撥打一個.php文件來代替。

確保你把這個在你的PHP文件:

header("Content-Type: application/json");