2017-02-09 287 views
0

我有這樣的模板:Ajax請求沒有返回

<div class="save-icon" style="margin-top: 2%"> 
    <a href="" onclick="changeNumber({{ number.getId }})">Link</a> 
</div> 

的JS:

{% block javascript %} 
{{ parent() }} 
<script type="text/javascript"> 
    function changeNumber(id){ 
     console.log(id); 
     $.ajax({ 
      type: "POST", 
      url: "{{path('numbers_update')}}", 
      data: { id:id}, 
      success: function(msg){ 
       //alert("Data Saved: " + msg); 
      } 
     }); 
    } 
</script> 
{% endblock %} 

在頁面的源代碼,我有:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 

<script type="text/javascript"> 
    function changeNumber(id){ 
     console.log(id); 
     $.ajax({ 
      type: "POST", 
      url: "/app_dev.php/admin/numbers/update", 
      data: { id:id}, 
      success: function(msg){ 
       //alert("Data Saved: " + msg); 
      } 
     }); 
    } 
</script> 

numbers_update的配置路線:

numbers_update: 
path: /numbers/update 
defaults: { _controller: ClientBundle:Admin/NumbersBlock:update } 
requirements: 
    _method: POST 

的梅索德

public function updateAction(Request $request){ 
    $i_id = $request->request->get('id'); 
    $em = $this->getDoctrine()->getManager(); 

    return $this->json(array()); 
} 

我使用基本認證,所以我加入此呼叫在security.yml

access_control: 
- { path: ^/admin/homepage, roles: ROLE_ADMIN } 
- { path: ^/admin/numbers, roles: ROLE_ADMIN } 
- { path: ^/admin/numbers/update, roles: ROLE_ADMIN } 

我現在登錄,但我沒有得到一個retourn在ajax請求之後。

請幫幫我!我不明白可能是什麼問題。你有什麼想法嗎? ... Thx提前。

+0

什麼是響應代碼?嘗試註釋除了最後一個行動中的行動中的所有行,並檢查響應代碼是否爲200 –

+0

同樣的問題....迴應是200 – user7424312

+0

你試過了返回JsonResponse()嗎? – panche14

回答

0

我認爲你必須:

use Symfony\Component\HttpFoundation\JsonResponse; 

return new JsonResponse(array('key' => 'value')); 
//instead of 
return $this->json(array()); 

清除緩存以確保萬無一失。

在chrome中,您可以在開發工具(當您使用ajax)的「網絡」選項卡中找到更多關於錯誤的信息。

+0

不工作...同樣的問題 – user7424312

+0

你是否看到過網絡中的symfony錯誤頁面標籤???這是一個500錯誤? 你必須看看這個錯誤頁面,否則你不會輕易找到你的錯誤... – Constantin

+0

我如何調試這個錯誤?當請求發出ajax請求時,請幫助我 – user7424312

1

你錯過了return false你的處理程序中兩個可能的地方之一。 做這一點:

onclick="changeNumber({{ number.getId }}); return false;" 

onclick="return changeNumber({{ number.getId }});" 

如果你去的第二個解決辦法 - 你需要在你的changeNumber函數的末尾添加return false;

這裏的問題是,當你點擊這個<a>時,對你的處理程序的調用確實有效,它可能會調用AJAX,但你沒有看到它。 既然你沒有阻止a.click的默認行爲,那麼這個頁面實際上會遵循href中給出的鏈接(除了調用你的處理程序),並且你離開當前頁面(或者可能再次轉到同一頁面)。

無論您是轉到不同的頁面還是轉到不同的頁面,WebDeveloper工具都很可能會刷新,並且您將看不到列出的AJAX調用。

WebDeveloper工具的提示:它也可能有助於在頁面提交和刷新之間啓用不清除控制檯和網絡選項卡。

0
<a href="" onclick="changeNumber({{ number.getId }})">Link</a> 

我建議你修改HREF鏈接,您的href =「」, 當你在此頁上單擊將再次刷新。即使你離開阿賈克斯。因爲刷新頁面,你也看不出來。你可以改爲 Href =「javascript :;」在其他地方,然後你按照正常的思維方式來寫。