2010-08-03 76 views
0

我想送使用$阿賈克斯的數據是這樣的:

$.ajax({'url': 'my.php', 
     'type': 'POST', 
     'data': arr, 
     'success': function(response) { 
         alert(response); 
        } 
}); 

的問題是,arr是一個關聯數組,看起來像:

arr['description_0'] = 'very nice picture!'; 
arr['tags_0'] = 'David "Nice Picture" 2010'; 
arr['description_1'] = 'In the pool'; 
arr['tags_1'] = '"April 2010" Australia'; 
    .     . 
    .     . 
    .     . 

如果my.php樣子:

<?php 
echo count($_POST); 
?> 

response是0.

但是,如果我改變

'data': arr, 

'data': 'a=chess&b=checkers', 

response是2,符合市場預期。

我應該如何將arr轉換爲數據才能正確發送?

+1

這工作就好了原樣。你有特定的問題嗎? – hobbs 2010-08-03 02:04:31

+0

是的,我更新了問題。 – 2010-08-03 02:20:31

+0

by arr being'associative array',我假設你的意思是一個JavaScript對象? – JAL 2010-08-03 02:38:43

回答

3

如果您真的有問題,請嘗試閱讀$.param()


另外,我發現,你是如何初始化你的arr變量的?

您應將其初始化爲var arr = {};,然後將其作爲'data': arr,傳遞給它。嘗試查看螢火蟲或webkit的開發工具,看看服務器上有哪些數據正在被post編輯。

-1

另一種選擇是序列化JSON和服務器上的反序列化JSON:

http://code.google.com/p/jquery-json/

數據:$ .toJSON(ARR)

注意:您不需要引用鍵在$ .ajax({url:...,data:...})

同樣你應該真的使用一個對象,因爲在JavaScript中沒有關聯數組。 JavaScript數組旨在使用數字「鍵」。

0

AJAX數據實際上只是一個常規的GET或POST請求,由JavaScript「靜靜地」完成。因此,數據必須形成爲正常的GET或POST,這意味着它必須採用key=value格式。您的'data' = arr是一個值,但沒有密鑰,所以PHP無法自動將其分配給$ _POST。就PHP而言,它只是接收一長串文本。

您可以通過閱讀$ HTTP_POST_RAW_DATA來檢索數據,如果您的PHP被配置爲設置該數據,或通過$data = file_get_contents('php://input');

0

我有同樣的問題,這裏是到目前爲止的評論未提及的解決方案:

$.ajax({ 
     'url': 'my.php', 
      'type': 'POST', 
      'data': { 
       id: 1792, 
       arr[description_0] : 'very nice picture!', // DON'T quote the array key 
       arr[tags_0] = 'David "Nice Picture" 2010', 
      }, 
      'success': function(response) { 
       alert(response); 
      } 
    });