2011-08-19 158 views
0

嗨,我遇到了XHR發佈請求的問題。XHR請求到PHP

在JavaScript

self.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
self.xhr.setRequestHeader("Method", "POST " + url + " HTTP/1.1"); 

在Firebug:

Parametersapplication/x-www-form-urlencoded 
{"u":"andrepadez","m":"\n...  
JSON  
m 
    "sfdsfsdfdsfdsf"  
u 
    "andrepadez" 
Source 
{"u":"andrepadez","m":"\nsfdsfsdfdsfdsf"} 

在.NET中,我張貼此一ashx的,而在我的ProcessRequest做:

StreamReader sr = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding); 
javaScriptSerializer.Deserialize<MyClass>(message); 

我沒有問題。

我不知道如何獲取PHP中的數據,$ _POST和$ _REQUEST都是空數組。

請幫忙嗎? 謝謝

回答

2

您尚未爲要發送的數據設置字段名稱。 PHP要求通過POST進入的數據格式爲fieldname=value。 _POST與其他任何數組一樣,並且存儲在PHP數組中的每個值都必須有一個鍵(這是表單字段名稱)。

您可以嘗試從PHP讀取檢索數據://輸入:

$post_data = file_get_contents('php://input'); 

但最簡單的解決方案是提供您的通話XHR一個字段名。

+0

非常感謝你......我不能使用第一個答案(至少馬上),因爲我正在實施一個同事的代碼,但第二個答案像一個魅力 –

1

如果您將Content-Type設置爲application/x-www-form-urlencoded那麼PHP自然會想要解析POST正文。但由於數據實際上並不構成表格數據,因此被廢棄爲無效。

您需要設置正確的CT application/json(實際上並不重要),因此PHP將保持獨立。然後它變得可用php://input$HTTP_RAW_POST_DATA

2

您正在設置內容類型爲application/x-www-form-urlencoded,但您將內容設置爲json。我猜這是混淆你的PHP網絡服務器。嘗試將您的POST內容設置爲您要告訴服務器的內容(application/x-www-form-urlencoded)或者讀取php://input中的原始HTTP內容。