2017-02-24 17 views
0

請參閱下面的代碼。爲什麼jQuery ajaxSend無法創建數據?

ajaxSend我可以編輯或添加s.data,但如果我在$ .post()中沒有提供任何其他數據,jQuery將發送無額外數據的請求。

有什麼建議嗎?

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    print_r($_POST); 
} else { ?> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Test</title>  
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script> 
     $(document).ajaxSend(function (e, xhr, s) { 
      s.data = s.data ? s.data+'&' : ''; 
      s.data += 'my_value=1'; 
     }) 

     $.post('/test.php'); // empty $_POST 
     $.post('/test.php', {value: 0}); // $_POST with value and my_value 
    </script> 
</head> 
<body> 

</body> 
</html> 
<?php } ?> 
+0

我看到它正確追加'my_value = 1'。你在看到什麼? –

+0

@DanielT。 在第二個請求 Array( [value] => 0 [my_value] => 1 ) – ArtyGrand

+0

這不是你想要的嗎? –

回答

0
我沒有使用jQuery的一些,而現在,因而

沒有使用過它的AJAX的東西,要麼,但在看看它的源所選擇的事件看起來是不正確你想要的東西后做。

  • 本文檔僅針對使用ajaxSend事件的日誌記錄請求提供示例。
  • 在jQuery的src/ajax.js的代碼發射ajaxSend後創建的(也是最明顯的開始)的請求。顯然,這個事件是同步發送的。因此,事件處理程序恰巧處理已經啓動的請求,但是直到當前的執行環境(請求已啓動並且您的事件處理程序被調用)纔會在實際處理後臺請求之前結束。這就是爲什麼可以通過引用訪問對象來修改附加到運行請求的任何數據,但不能添加數據,因爲jQuery之前沒有將它附加到請求中。事件發出後,它不使用s.data。只是有那麼做了幾件事情,並且大多與處理超時等

所以,無論是文檔,建議使用ajaxSend這類請求過濾的,也沒有代碼顯示的任何支持。但在檢查代碼時,我偶然發現了一些對預過濾器的支持。也許你應該堅持這一點,並查閱有關$.ajaxPrefilter的文檔。

+0

是的,這個回調在ajaxPrefilter中完美的工作。但我真的很驚訝無法附加數據。 – ArtyGrand

相關問題