2016-12-14 60 views
0

上的ajax发布数据和文件。如何在此处使用事件onclick

<form id="myForm"> 
 
    <input type="text" name="name"> 
 
    <input type="file" name="userImage"> 
 
    <button onclick="post('./example.php')" type="button">Save</button> 
 
</form>

现在我想通过使用后()函数将它张贴

Java的脚本:

Function post(url){ 
 
    $.ajax({ 
 
     url:url, 
 
     type: 'POST', 
 
     data: $("#myform").serialize(), 
 
     success: function (data) { 
 
      alert("successfully posted."); 
 
     } 
 
    }); 
 
}

但没有序列号文件

+0

你的问题是什么LEM?请在你的问题中定义实际问题并更新它。 –

+0

实际的问题是文件未序列化。 –

+0

你的意思是表单数据没有被序列化? –

回答

0

我的建议是:尽量分开有html和定义“的” jQuery的功能的“attacheventlistener”功能或事件回调JS(这样比较容易)。

你的问题是,当你需要传递一个有效的url时,你传递的是字符串“url”,所以直接在ajax url字段上写入url或者在你的form标签上定义一个数据属性。 data-url =“http:// whatever”,并从事件中捕获此值。

如果你使用jquery的“on”函数极其简单,你可以通过jquery的“data”函数通过“this”var获得它的数据值。

喜欢的东西...

$("#myForm").on("click", 
     function() { 
      post(this.data("url")); 
}); 

,不过也许你并不需要的网址是一个变种。

0

如果我理解正确,问题是什么都没有发布。 问题是是,你正试图通过AJAX做一个文件上传,这是没有错的,但它需要做的事情在这里不同的显示:
jQuery Ajax File Upload

0

首先,我需要说的是,如果你想上传文件,我的意思是如果您的表单有文件输入,然后根据RFC-7578添加表单属性enctype="multipart/form-data"。您还可以看到使用http://www.w3schools.com/tags/att_form_enctype.asp

然后再次移动到html部分。假设你有一个像

<form action="some_domain/example.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" id="fileId"/> 
    <input type="text" name="firstName" id="name"> 
    <button onclick="post('some_domain/example.php')" type="button">Save</button> 
</form> 

,表格输入后立即使用Ajax文件数据:

function post(url){ 
    $.ajax({ 
     url:url, 
     type: 'POST', 
     processData:false, 
     contentType:false, 
     data: $('#fileId')[0].files[0], 
     success: function (data) { 
      alert("successfully posted."); 
     } 
    }); 
} 

我认为这应该是工作的罚款。

UPDATE: 如果你想发布文本数据,那么你应该使用FormData对象。

function post(url){ 
var formData = new FormData(); 
    var files = document.getElementById("fileId").files; 
    for (var i = 0; i < files.length; i++) { 
     var file = files[i]; 
     formData.append('files[]', file, file.name); 
} 
formData.append('firstName',$('#name').val()); 
$.ajax({ 
     url:url, 
     type: 'POST', 
     processData:false, 
     contentType:false, 
     data: formData, 
     success: function (data) { 
      alert("successfully posted."); 
     } 
    }); 
} 
+0

我想发布两个文本字段数据和文件, With without Reload –

+1

@AponAhmed查看更新。 –

+0

我有很多文本字段超过30个。 –

0

,得到形式像

<form enctype="multipart/form-data" ....> 

属性这应该工作

0

您可以通过表单数据添加额外的数据

使用serializeArray并添加额外的数据:

var data = $('#myForm').serializeArray(); 
data.push({name: 'tienn2t', value: 'love'}); 
$.ajax({ 
type: "POST", 
url: "your url.php", 
data: data, 
dataType: "json", 
    success: function(data) { 
     //var obj = jQuery.parseJSON(data); if the dataType is not specified as json uncomment this 
     // do what ever you want with the server response 
    }, 
    error: function() { 
     alert('error handing here'); 
    }); 
相关问题