2014-06-14 188 views
2

許多人似乎在使用ajax傳遞參數方面存在問題。我看了很多這些帖子,但沒有任何答案適合我。在Ajax中傳遞字符串作爲參數

我在Symfony工作。我試圖通過ajax傳遞參數,以便我可以更新表數據,但即使JavaScript讀取我的數據,我似乎無法在我的控制器中接收它。

JavaScript函數是:

$('#form-save').click(function(){ 
    $('#myModal').modal('hide'); 
    var parent = $(this).parent().parent(); 
    var target = parent.attr('target'); 
    var title = $('#title-'+target); 
    var id = $('#form-info').attr('row'); 
    var date = $('#date-'+target); 
    var dateTime = new Date(date.text()); 
    var curr_date = ("0" + dateTime.getDate()).slice(-2);; 
    var curr_month = ("0" + (dateTime.getMonth() + 1)).slice(-2); 
    var curr_year = dateTime.getFullYear(); 
    var from = $('#from-'+target); 
    var till = $('#till-'+target); 
    var description = $('#description-'+target); 
    //First Log 
    console.log(target + title.text() + date.text() + from.text() + till.text() +description.text()); 

    $.ajax({ 
     type: "POST", 
     url: "{{ path('restaurant_my_events') }}", 
     data: { 
      action: 'update', 
      id: id, 
      title: title.text(), 
      date: curr_year + "-" + curr_month + "-" + curr_date , 
      from: from.text(), 
      till: till.text(), 
      description: description.text() 
     }, 
     dataType: "json", 
     success: function(response) { 
      //Second Log 
      console.log(response); 

     } 
    }); 

對於調試我是控制檯上記錄兩次,從所述第一日誌的輸出爲:

0 hello world 06-14-2014 12:0612:06 description 2 

這證實,所有的輸入元件相匹配,在讀取數據時沒有錯誤,第二個日誌的輸出只是爲了驗證我的控制器收到了我的參數。

控制器功能是:

public function myEventsAction(Request $request){ 
    $restoID = 2; 
    $repository = $this->getDoctrine()->getRepository('LesDataBundle:Party'); 
    $events = $repository->findByRestoId($restoID); 

    if ($request->isXMLHttpRequest()) { 
     $status = false; 
     $action = $request->get('action'); 
     $partyID = $request->get('id'); 
     if($action == 'delete'){ 
       //Delete function 
     }else if($action == 'update'){ 
       //Update function 
     } 

     $test = $action ." + ". $partyID ." + ". $request->get('title') ." + " . $request->get('date') ." + " . 
      $request->get('from') ." + " . $request->get('till') ." + " . $request->get('description'); 

     return new JsonResponse(array(
      'id' => $partyID , 'request' => $request , 'test' => $test)); 
    } 


    return $this->render("LesRestaurantBundle:Admin:Events/myEvents.html.twig", 
       array('events' => $events)); 
} 

和來自第二記錄輸出是:

Object {id: "2", request: Object, test: "update + 2 + + NaN-aN-aN + + + "} 

我只接收到的參數標識符。爲什麼?

+0

你是否在做預先請求回調(可能會從DOM中刪除元素)?根據瀏覽器的開發人員工具欄中的「網絡」選項卡,將哪些POST參數發送到服務器?第一個日誌行寫入時,curr_date/curr_month/curr_date的值是多少? – juanrpozo

+0

@juanrpozo沒有信息在頁面上是靜態的,要發送這個信息彈出式公式打開它從相同的來源的數據預先填充它的領域(工作正常),然後我發送輸入字段的值通過Ajax。 從網絡日誌, **表單數據: 動作:更新 ID:2 標題: 日期:NaN的-AN-AN 來自: 至: 描述:** –

+0

您不響應隱藏.bs.modal事件,你呢?看起來,$ .ajax調用被觸發時,#title,#from,#till和#description元素是空的。如果在隱藏模態之前定義數據對象,或者在調用$ .ajax方法後隱藏模態,會發生什麼? – juanrpozo

回答

0

嘗試在通過AJAX發送之前將您的字符串轉換爲encodeURIComponent()

相關問題