2010-02-25 167 views
3

我很難找出這個問題。似乎不管我嘗試什麼,PHP總是返回一個空數組。這是我的主文件(的index.php)的代碼:「鏈接」來自PHP服務器的JSON數據響應是空的

<script language="javascript" type="text/javascript"> 

$(document).ready(function(){ 

    $(".ajaxlink").click(function() { 
    callServer(); 
    return false; //Stop link from redirecting 
    }); 

}); 

var test = { "testName": "testValue" } 
var testJSON = JSON.stringify(test); 

function updatePage(data) { 
    document.getElementById("testDiv").innerHTML = data; 
} 

function callServer() { 
$.ajax({ 
    type: "POST", 
    url: "ajax/server.php", 
    data: testJSON, 
    success: function(data) { 
    updatePage(data); 
    }, 
    //Upon error, output message containing a little info on what went wrong 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status); 
    } 
}); 
} 

</script> 

<div id="testDiv">Something here</div> 

<a href="test1.htm" class="ajaxlink">Link!</a> <br> 

這基本上運行當您單擊的callServer()函數。然後它將測試json數據,即{「testName」:「testValue」}發送到server.php。 Firebug報告說json數據確實發送到了server.php。

我server.php看起來是這樣的:

<?php 

print_r($_POST); 

?> 

這將返回在testDiv如下:

Array 
(
) 

在阿賈克斯功能的數據類型是沒有定義,所以無論輸出服務器.php文件吐出來,應該是可讀的。所有必需的庫(json,jquery)也包含在我的文檔中。我在Apache 2.2和PHP 5.3.1上運行它,但是它在我的web服務器(它是成千上萬個網站的主機)上顯示了相同的結果。請求頭中使用的內容類型是'application/x-www-form-urlencoded; charset = UTF-8',以便應該正常工作。

謝謝你的時間。 致以問候 soren

回答

3

我認爲你在錯誤的方式發送數據。要麼發送像testName=testValue這樣的字符串,要麼將test中的值直接分配給data參數.ajax(),並且不要使用stringify方法。

因爲,如果你使用stringify,實際發送的數據將是(我假設,我不知道這裏):

'{ "testName": "testValue" }'

,但這不是有效的參數字符串。

它應該是形式的

'testName=testValue'

因此,使用test直接,.ajax()將對象轉換成適當的字符串:

function callServer() { 
$.ajax({ 
    type: "POST", 
    url: "ajax/server.php", 
    data: test, 
    success: function(data) { 
    updatePage(data); 
    }, 
    //Upon error, output message containing a little info on what went wrong 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert('An Ajax error occured\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown + '\nstatus = ' + XMLHttpRequest.status); 
    } 
}); 
} 
+0

在這裏同意......你不需要stringify。只需將數據作爲JSON發送即可。將該測試變量作爲數據而不是testJSON。 – Lindsay 2010-02-25 17:29:33

+0

Firebug說即時發送正確的JSON數據。我的js中的'測試'也是一個對象。 – 2010-02-25 17:30:03

+0

經過進一步測試,這工作!!!!!非常感謝您 – 2010-02-25 17:32:36

0

使用firefox和Live Http Headers擴展。
使用此功能,您將能夠確切地看到問題所在,
Php或Js代碼。

live http headers

+0

即吐出以下內容:http://pastebin.org/97270 這似乎對我好 – 2010-02-25 17:28:26

+0

不應該它應該看起來像這樣:從{「testName」:「testValue」}女巫在我看來是錯誤的testName = testValue – DCC 2010-02-26 11:34:56

0

我不知道你的輸出從PHP腳本是JSON格式。

如果您使用的是較新版本的PHP(您是),您將有權訪問json_encode和json_decode函數。而不是做:

print_r($_POST); 

嘗試:

print json_encode($_POST); 

如果您的PHP版本沒有這些功能,您可以使用一個庫,如Zend框架的Zend_Json類,以編碼輸出它們之前,您的PHP變量爲JSON。

當它回來時,它將是一個JSON格式的字符串。在您的jQuery.ajax調用中設置dataType應將其評估爲JS對象。如果沒有,你將不得不調用它的Javascript eval函數,或者(最好)使用JSON.parse(data)。

+0

我將您的代碼更正爲$ _POST而不是$ _POST。這只是輸出以下'[]' – 2010-02-25 17:31:29

相關問題