2011-09-16 23 views
0

我正在測試wireit,並且能夠創建新的表單容器等。我測試了ajax適配器例子,有它的ConfigEd類似:如何獲取Wireit json輸出?

WireIt.WiringEditor.adapters.Ajax.config = { 
    saveWiring: { 
     method: 'PUT', 
     url: 'http://voipd7.localhost/wirings.json' 
    }, 
    deleteWiring: { 
     method: 'GET', 
     url: function(value) { 
      if(console && console.log) { 
       console.log(value); 
      } 
      // for a REST query you might want to send a DELETE /resource/wirings/moduleName 
      return "fakeSaveDelete.json"; 
     } 
    }, 
    listWirings: { 
     method: 'GET', 
     url: 'listWirings.json' 
    } 

保存URL的「http://voipd7.localhost/wirings.json」是隻寫$ _GET或$ _ POST到一個PHP頁面文件,但它輸出的唯一東西是:

Array 
(
    [q] => wirings.json 
) 

我錯過了什麼嗎?不應該通過獲取或發佈發送json的東西?

回答

0

從提供的配置中,顯然執行保存操作的HTTP方法是PUT。使用此方法時,超全局變量$_POST$_REQUEST不包含發佈的數據。 $_GET仍將具有來自查詢字符串的數據。

爲了解析發佈數據時該方法是PUT,做一些如下:

$vars = array(); 
parse_str(file_get_contents("php://input"), $vars); 

PUT方法期望接收文件作爲輸入。這就是爲什麼我們使用file_get_contentsparse_str解析參數,就好像它是通過URL傳遞的查詢字符串一樣。要提取數據變量不論採用何種方法使用的:

$vars = array(); 
if($_SERVER['REQUEST_METHOD'] == 'GET') { 
    $vars = $_GET; 
} else if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $vars = $_POST; 
} else if($_SERVER['REQUEST_METHOD'] == 'PUT') { 
    parse_str(file_get_contents("php://input"), $vars); 
} 

我基於這個非常漂亮的文章回復:http://www.lornajane.net/posts/2008/accessing-incoming-put-data-from-php

一注:通常Web服務器配置爲不允許PUT方法,但是當它看到(至少Apache這樣做)PUT請求是針對現有文件的,它會調用該文件來處理請求,並且可以在文件中使用上述代碼來提取發送的參數。

+1

啊,那東西讓我感覺到了。我已經改變了從發佈到發佈,直到現在沒有任何東西給我(使用file_get_contents)。 GET和POST仍然不起作用,但這必須是一個複雜的bug。 – that0n3guy