2009-08-07 53 views
0

目前我正在開發一個基於ajax的web應用程序,它執行一些XHR。請參考PHP腳本中的jQuery post數據

我選擇了CakePHP + jQuery來完成這些工作,除了這個小問題外,他們工作得很好。

說,我做一個有效的JSON形式==>的字符串{「測試」:「世界你好」}

然後我打電話jQuery的AJAX方法將其發送到目的地PHP頁面:

jQuery.ajax 
    ({ 
     type: 'POST', 
     cache: false, 
     async: false, 
     timeout: 10000, 
     url : 'http://localhost/method/', 
     dataType : 'json', //defines expected response datatype 
     contentType : 'application/json', //defines request datatype 
     data : { "test" : "hello world"}, 
     success : function(json) 
     { 
      //do some stuff here. 
     }}); 

以前我試過這個帶有空數據的ajax函數(即使用data:{},因爲這是一個POST),並且它工作得很好;然而,現在我已經添加了一個JSON格式的數據到HTTP POST,有沒有一種方法可以從PHP腳本中引用它?

我想:data : { "data" : {"test" : "helloworld"}}

我使用PHP的isset [$ _ POST [ '數據']檢查,結果是POST變量 '數據' 未設置。

任何人都可以給我一種方法來解決這個問題嗎?提前謝謝了!!!

+0

你知道,它的價值只是在做 的print_r($ _ POST); 並查看post數組的外觀。 – danieltalsky 2009-08-07 06:13:46

回答

4

這可能是你是什麼(從http://www.factsandpeople.com/facts-mainmenu-5/26-html-and-javascript/89-jquery-ajax-json-and-php)後:

$(document).ready(function(){ 
    var data = 
    { 
    "sales": [ 
     { "firstname" : "John", "lastname" : "Brown" }, 
     { "firstname" : "Marc", "lastname" : "Johnson" } 
    ] // end of sales array 
    } 
    var dataString = JSON.stringify(data); 
    $.post('simpleformSubmit.php', { data: dataString}, showResult, "text"); 
}); 

PHP腳本(發佈數據中包含的JSON結構):

<?php 
    $logFile = 'logFile'; 
    $res = json_decode(stripslashes($_POST['data']), true); 

    echo "sales1_lastname: ".$res['sales'][1]['lastname']; 
?> 
+0

嗨dspinozzi: 感謝您的幫助!我會這樣做。 – 2009-08-07 06:42:00

0

數據將以通常與POST請求關聯的鍵/值格式進入PHP。 jQuery data的值正是jQuery用來創建POST請求的值......進入PHP的$_POST數組的實際鍵/值對是您在data內部放置的值。

對於您的代碼,您應該有一個$_POST['test']helloworld

+0

大家好:我已經試過了,以及。但是我仍然沒有從PHP端設置$ _POST ['test'] 。這也檢查了Firebug控制檯... 疑惑:( – 2009-08-07 06:01:23

0

data數組中的每個鍵/值對都作爲POST鍵/值對發送到PHP。所以在你的情況下:

echo $_POST['test']; // Echos "helloworld" 
1

看起來這網址可能是拼寫錯誤嗎?

url : 'http://localhost/mehtod/'

代替

url : 'http://localhost/method/'

有時最小的事情是最煩人!

+0

你好dspinozzi: 不,這只是一個假的方法的名稱,類型如此之快,它看起來像一個錯字... 其實真正的情況是更復雜,我只是編寫了一個小例子,成爲一個好問題的一部分:) 感謝您的熱心檢查!已經在我的第一篇文章中編輯過。 – 2009-08-07 06:04:08

1

林不知道設置內容類型是否有任何與蛋糕php的含義。

http://docs.jquery.com/Ajax/jQuery.ajax#options

當發送數據到服務器時,使用這種內容類型。默認是「application/x-www-form-urlencoded」,這在大多數情況下都可以。

將其設置爲應用/ JSON可能是其編碼不同,這就是爲什麼你沒有看到它的$ _POST數組中

+0

喜dspinozzi: 我可以毫無問題同時運行jQuery和PHP,如果我刪除的contentType選項,並保持我的數據作爲數據:「考= blahblahblah」 但是,這不是我想要的...... 我想找出一種方法,以便我可以在將它發送到PHP腳本頁面之前構建一個json格式的字符串,在該頁面中將使用PHP的json_decode方法將其解碼爲相關數組。 – 2009-08-07 06:11:22

0

來自jQuery文檔的報價(http://docs.jquery.com/Ajax/jQuery.ajax#options):

數據 - 要發送到服務器的數據。它被轉換成查詢字符串,如果還不是字符串的話。它附加到GET請求的url。請參閱processData選項以防止此自動處理。對象必須是鍵/值對。如果value是一個數組,則jQuery使用相同的鍵序列化多個值,即{foo:[「bar1」,「bar2」]}變爲'& foo = bar1 & foo = bar2'。

0

僅供參考:JQuery改變了他們序列化發佈數據的方式。

http://forum.jquery.com/topic/nested-param-serialization

必須設置 '傳統的' 設置爲true,其他明智

{值: 「1」, 「2」, 「3」]}

會出[] = 2個&值作爲

值[] = 1個&值[] = 3

代替

值= 1個&值= 2個&值= 3