2011-12-04 23 views
0

如何從dojo提交數組到php。 我提交這些值:使用dojo提交數組到php

["a", "b", "c"] 

這是我走到這一步:

btn_send.onclick(function(){ 
      var name_array = name_looper(); 
      console.log(name_array); 
      dojo.xhrPost({ 

       url: "dojo_phpform.php", 
       content: {names: name_array}, 
       load: function(result) { 
        var x = dojo.byId('results'); 
        x.innerHTML = result; 
       } 
      }); 
     }); 

     function name_looper(){ 
      var names = dojo.query('input[type=text]'); 
      var name_array = []; 
      names.forEach(function(element, index, array){ 
       name_array[index] = dojo.attr(element, 'value'); 
      }); 

      return name_array; 
     } 

我想呼應$ _ POST從PHP文件(dojo_phpform.php)的名字']和它沒有返回任何錯誤。看起來這個數組並沒有被提交。唯一返回的是數組中的最後一項。我該怎麼辦?請幫助,提前致謝!

+0

使用'var_dump($ _ POST)'然後看看它是什麼 –

+0

你可以發佈你的PHP表單代碼嗎? – Philippe

+0

@Philippe:我只做了print_r($ _ POST ['names']);在php文件中查看是否正常工作 –

回答

2

據我所見,dojo的xhr函數不支持它。我正在使用一個輔助函數來自己「扁平」參數。

_flattenXhrParams: function(params) 
{ 
    var newParams = {}; 
    for(var key in params) 
    { 
     if(dojo.isObject(params[key])) 
     { 
      for(var innerKey in params[key]) 
      { 
       newParams[key + "[" + innerKey + "]"] = 
         params[key][innerKey]; 
      } 
     } 
     else if(dojo.isArray(params[key])) 
     { 
      for(var i = 0, l = params[key].length; i < l; i++) 
      { 
       newParams[key + "[]"] = params[key][i]; 
      } 
     } 
     else 
     { 
      newParams[key] = params[key]; 
     } 
    } 
    return newParams; 
} 

它的屁股很醜,我知道,顯然只適用於一維數組/對象。在你的情況,你會這樣做:

dojo.xhrPost({ 
    url: "dojo_phpform.php", 
    content: _flattenXhrParams({names: name_array}), 
    load: function(result) { 
     var x = dojo.byId('results'); 
     x.innerHTML = result; 
    } 
}); 

..你會得到POST參數,如names[]=a&names[]=b&names[]=c。對於對象,你會得到names[somekey]=a&names[otherKey]=b等PHP處理很好。

1

我很確定內容對象的值只是字符串。如果你想提交一個數組,你必須把它轉換成JSON,然後在服務器上使用json_decode

+0

如果我不使用內容對象,我該如何提交它? –

4

我剛剛用grails和php進行了測試。在grails中,我沒有問題通過dojo xhrPost獲取數組:我按預期方式檢索正確解析了其數組的所有數組。

如果我上傳:

dojo.xhrPost({ 
    content : { 
     names : ['foo', 'bar'] 
    }, 
    url : "mygrailscontroller" 
}); 

我得到在另一邊的陣列PARAM。這證明這個問題在dojo一方沒有解決,但在php方面。在php中,如果一個表單輸入具有一個數組類型的變量,則其名稱參數必須用方括號設置,如:「names []」而不是「names」。

所以......在你的情況下,解決方案不是將數組拼成一個字符串(抱歉),而是用括號命名數組參數。所以它會是:

dojo.xhrPost({ 
    content : { 
     "names[]" : ['foo', 'bar'] 
    }, 
    url : "myphpcontroller" 
}); 
+0

感謝您發佈此信息,我不知道這是可能的。 Grails是否處理'{「names []」:['foo','bar']}'? – Frode

+0

實際上,在grails中,我不需要[] ...它接受名爲「names」的post參數,但服務器將其作爲數組進行檢索。 – Philippe

+0

當然,我完全忘了這一點。不錯的工作。 – DanMan