2012-12-10 43 views
2

我使用這個腳本來得到一個形式的所有值,以便爲Ajax請求做準備:FORMDATA對象不是通過jQuery AJAX調用提交

function saveDataAjax(){ 
    var fd = new FormData(); 
    var inputs = document.getElementsByTagName('input'); 
    for(i=0;i<inputs.length;i++) { 
     fd.append(inputs[i].name, inputs[i].value); 
    } 
    $.ajax({ 
     url: '/edit.php', 
     data: fd, 
     type: 'POST', 
     dataType: 'html', 
     success: function(data){ 
      alert(data); 
     } 
    }); 
} 

但是我越來越從Type error jQuery的,如果我提醒fd['inputname']我得到了一個未定義,所以我想我一定是錯的地方做一些事情......

Firefox的調試器告訴我:NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object @ http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js:2

+0

介意發佈FormData的代碼?如果你遇到了一個未定義的問題,那麼很可能出現問題。 –

回答

3

添加下面的AJAX調用:

processData: false, 
contentType: false, 

所以它看起來像:

$.ajax({ 
     url: '/edit.php', 
     data: fd, 
     type: 'POST', 
     processData: false, //Add this 
     contentType: false, //Add this 
     dataType: 'html',    
     success: function(data){ 
      alert(data); 
     } 
    }); 
+1

這使腳本能夠正常工作,但我試圖弄清楚爲什麼(理解它是如何工作的)並沒有真正得出結論。如果使用默認值(true),processData和contentType會執行什麼操作?無論如何,非常感謝! – ghego1

0

這可能不是原因,只是想指出它出:i在這裏是全球性的。 JS中的想法是全球減排。或許應該var i=...

+0

我同意,你可以使用像這樣的formdata構造函數 新的FormData(yourform); – nDijax

0

此頁面的幫助你... :)

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"> 
    </script> 
</head> 
<body> 
    <form method="post" id="fileinfo" enctype="multipart/form-data"> 
    file <input type="file" name="slug"><br> 
    <input type="button" id="uploadBTN" value="Stash the file!"></input> 
    </form> 
    <script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $('#uploadBTN').on('click', function() 
     { 
      var form = $('form').get(0); 
      console.log(form); 
      var fd = new FormData(form); 
      fd.append('user_id',4); 
      fd.append('user_media_category_id',1); 
      //console.log(fd); 
      fd.append("user_", "This is some extra data"); 
      $.ajax({ 
       url: 'http://localhost/yii2/azstudio/project/api/web/v1/user-media/new', 
       type: 'POST', 
       data: fd, 
       success:function(data){ 
        console.log(data); 
       }, 
       error:function(data){ 
       console.log(data); 
       }, 
       cache: false, 
       contentType: false, 
       processData: false 
      }); 
     }); 
    }); 
    </script> 
</body> 
</html>