2012-12-24 89 views
1

我正在構建一個AJAX表單,並試圖通過JSON發送3個字段。未在POST中發送JSON數據?

客戶端,形式序列化,並進入JSON格式:

$('#form-signin').live('submit', function(event) { 
    var target = $('#ajax'); 
    var url = '/ajax/user/authenticateLevel2'; 

    $.ajax({ 

     type: "POST", 
     url: url, 
     data: $.base64.encode($('#form-signin').serialize()), 
     dataType: 'json', 

     success: function(data, status) { 
      $.getJSON(url, function(data) { 
       $('#ajax').html($.base64.decode(data.html)); 
       $('#ajax').modal(); 
      }); 
     } 
    }); 
    event.preventDefault(); 
}); 

服務器端,我的路由器把URL請求時,看到的是,第一部分包含「AJAX」然後繼續特意通過路由請求到AJAX處理程序。

我的問題是,即使在路由器內部,檢查$_REQUEST,這是用來獲取有關帖子的信息,帖子數據不存在。 $_POST也是如此。

即使是第一個網頁請求命中(的index.php),$_REQUEST沒有數據。

我在做什麼錯?

服務器端,

該請求被髮送到的index.php其中包括自動裝載機和初始化腳本。

初始化腳本初始化數據庫連接,設置錯誤,異常和會話處理,然後傳遞到路由器請求。

的路由器,在其施工方法:設置URL作爲陣列(分解$_SERVER['REQUEST_URI']),然後設置相關的控制器,方法和其他參數。

在這種情況下,我們正在做一個Ajax請求,特殊處理我們請求分派之前發生。

的方法,參數設置爲:用額外的信息(URL,控制器,方法和數據庫對象)沿對調度傳遞

$requestParams = $_REQUEST; 
    unset($requestParams['url']); 

該請求參數(一個或多個)。

在所有情況下,我們使用這種方法主要是調度:

  $dispatchedController = new $this->controller($this->database); 
      $method = $this->method; 

      return $dispatchedController->$method($this->params); 

回答

0

東西你是不是JSON發送到服務器只是一個base64編碼字符串。你也期待關鍵/配對值。要發送密鑰/對值,只需將序列化的表單數據傳遞給$ .ajax函數。

$('#form-signin').live('submit', function(event) { 
    var target = $('#ajax'); 
    var url = '/ajax/user/authenticateLevel2'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $('#form-signin').serialize(), 
     dataType: 'json', 
     success: function(data, status) { 
      $.getJSON(url, function(data) { 
       $('#ajax').html($.base64.decode(data.html)); 
       $('#ajax').modal(); 
      }); 
     } 
    }); 
    event.preventDefault(); 
}); 
0

的代碼應該工作(假設你的HTML是不是這裏的問題,例如,'#form-signin'是正確的形式,正確的選擇)。

你提到你無法獲取服務器端的數據。但是,您是否確定您甚至可以從客戶端發送所需的數據?例如,您是否使用Firebug等工具分析了請求?

+0

沒錯,螢火看到了報頭中的JSON,所以它肯定是送客戶端。甚至解碼JSON字符串,我得到我輸入的表單輸入。 – bear

+1

@Shamil聽起來你應該發佈你的服務器端代碼,然後由於客戶端正在做什麼應該做的。 – Ulises

+0

我已經在OP中添加了對進程的基本描述。 – bear

1

如果我很久以前就記得使用插件,方法$ .base64.encode()返回一個單獨的字符串,所以您可能發送到服務器的內容就像沒有值的單個參數。

我認爲你應該做這樣

data: "foo=" + $.base64.encode($('#form-signin').serialize()),