【问题标题】:FormData Object not submitting via jQuery AJAX callFormData 对象未通过 jQuery AJAX 调用提交
【发布时间】:2012-12-10 20:52:06
【问题描述】:

我正在使用此脚本从表单中获取所有值,以便为 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);
        }
    });
}

但是,我从 jQuery 获得了 Type error,如果我提醒 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

【问题讨论】:

  • 介意发布 FormData 的代码吗?如果你在那里得到一个未定义的,很可能这就是事情出错的地方。

标签: javascript jquery


【解决方案1】:

将以下内容添加到 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);
       }
   });

【讨论】:

  • 这使得脚本工作,但我试图找出原因(以了解它是如何工作的)并没有真正得出结论。如果离开,processData 和 contentType 会做什么b 默认(真)?无论如何,非常感谢!
【解决方案2】:

这可能不是原因,只是想指出:i 在这里是全局的。 JS 中的想法是针对全球减排。应该是var i=...

【讨论】:

  • 我同意,您可以像这样使用 formdata 构造函数 new FormData(yourform);
【解决方案3】:

此页面可以帮助您...:)

<!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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2014-05-09
    • 2011-04-21
    相关资源
    最近更新 更多