我正在开发一个项目,我使用Rgraph PHP库实现了几个图形/图表.在我的脚本中,我为图表执行以下操作:
Draw()方法绘制图形.canvas.toDataURL()方法创建图像数据变量.$.post()方法将此图像数据变量传递给服务器.此解决方案中的所有内容在我的localhost上运行良好,但是在开发服务器上,传递图像数据的AJAX请求返回a 403 Error.
我在客户端和服务器端都记录了数据以确定问题.客户端日志记录确认传递的imageData变量看起来正确.但是,服务器端日志记录确认传递的imageData变量是导致问题的原因.
去年有一个非常类似的问题,但他们无法确定这个问题的根本原因.任何人都可以帮我指出解决这个问题的正确方向吗?
我认为这是一个可能的数据编码问题,但如果是这种情况,为什么它在一台服务器而不是另一台服务器上运行?
我的相关Javascript:
radar.Set('chart.contextmenu', [
['Get PNG', RGraph.showPNG],
null,
['Cancel', function () {}]
]);
radar.Draw();
var imageData = radar.canvas.toDataURL("image/png");
console.log('imageData: ' + imageData);
console.log('filename: ' + 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png');
$.post("/Surveys/save_chart", {
src : imageData,
filename: 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png'
});
Run Code Online (Sandbox Code Playgroud)
客户端记录:
imageData: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAOECAYAAACxbcj6AAAgAElEQ…AgQIAAgVECAqxR49YsAQIECBAgQIAAAQIECBAgQKCfwP8CXHJ+WDHVMbcAAAAASUVORK5CYII=
filename: tmpRadar19-1.png
POST http://website.com/Surveys/save_chart 403 (Forbidden) …Run Code Online (Sandbox Code Playgroud) 有没有办法在Internet Explorer中执行以下解决方案?(IE7及以上)
link:使用jQuery.ajax发送multipart/formdata
解决方案代码在IE的每个浏览器中都很有用.
我在尝试使用bootsy gem上传文件时遇到了问题,但问题与bootsy本身无关.Bootsy生成一个具有以下定义的表单:
<form class="bootsy-upload-form form-inline" id="new_image" data-type="json" enctype="multipart/form-data" action="/bootsy/image_galleries/67/images" accept-charset="UTF-8" data-remote="true" method="post">
<input name="utf8" value="?" type="hidden">
<input name="authenticity_token" id="authenticity_token" value="1pQMR5j33OKupMg4TSnQafLQx1BxzWjkP1KqTfZafqDRfGqwB8r2J4FzRE+dyuoHVOw/W0qd1FZ1JoJsJFThDQ==" type="hidden">
...
Run Code Online (Sandbox Code Playgroud)
当我尝试上传文件时,执行以下行:
this.uploadInput.closest('form').submit();
Run Code Online (Sandbox Code Playgroud)
我之前添加了警报,所以我会看到表单的序列化数据是如何显示的,所有字段都按预期显示(包括真实性标记等):
alert(this.uploadInput.closest('form').serialize());
Run Code Online (Sandbox Code Playgroud)
提交表单时,在POST请求期间没有数据发送,只有标题,在浏览器检查器中看不到任何内容,在rails的日志文件中看不到任何内容,它只是如下所示:
Started POST "/bootsy/image_galleries/47/images" for ::1 at 2016-02-05 11:20:04 +0100
Processing by Bootsy::ImagesController#create as HTML
Parameters: {"image_gallery_id"=>"47"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 0ms (ActiveRecord: 0.0ms)
FATAL -- :
ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken:
_ actionpack (4.2.4) lib/action_controller/metal/request_forgery_protection.rb:181:in `handle_unverified_request'_
Run Code Online (Sandbox Code Playgroud)
我在表单中生成了真实性令牌,我在元标记中有令牌,一切看起来都很好,没有任何错误被抛出.我还尝试创建类似于我的真实项目的示例应用程序,它按预期工作,形成正常提交的数据 - 当我尝试比较HTML代码和附加到两者的javascript事件时,它们几乎相似,因为其他因为其他部分宝石像ajax_pagination等,但没有任何部分,这应该导致这样的行为.
我正在使用Rails 4.2.4,使用body元素上的属性data-no-turbolink禁用turbolinks,项目使用bootstrap并包含JS库,如jQuery,下划线,欧芹,momentjs.
我会很感激任何想法,可能出错的原因,为什么表单不应该提交任何数据,哪里可能是一个问题.提前感谢任何提示.
更新:
为了澄清事情,我在使用AJAX发送之前拍摄了一个状态 - 这个javascript是jQuery的jquery_ujs = RoR适配器的一部分.您可以看到,该数据包含发送前的所有表单域:

但是数据不会发送到服务器: …
我正在尝试使用带有处理程序(c#)的jquery ajax上传文件.问题是,当我调用处理程序时,我得到了
context.Request.File.Count=0
Run Code Online (Sandbox Code Playgroud)
这是aspx代码:
<!--aspx file code-->
<script language="javascript" type="text/javascript">
$().ready(function ()
{
$('#save').click(function (e)
{
CalluploaderHandler();
});
});
function CalluploaderHandler()
{
$.ajax({
type: "POST",
url: "Services/UPloader.ashx",
contentType: "application/json; charset=utf-8",
success: OnComplete,
error: OnFail
});
return false;
}
function OnComplete(result)
{
alert('Success');
}
function OnFail(result)
{
alert('Request failed');
}
</script>
</head>
<body>
<form enctype="multipart/form-data">
<label for="file">
Filename:</label>
<input name="file" id="file" type="file">
<input id="save" name="submit" value="Submit" type="submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
c#代码处理程序:
/* handler*/
public void ProcessRequest(HttpContext context)
{
string savedFileName = …Run Code Online (Sandbox Code Playgroud) 我使用这个脚本在Rails 3.2.8应用程序中使用HTML5 FormData上传文件(逐个).
$('.uploader input:file').on('change', function() {
$this = $(this);
$('.alert').remove();
$.each($this[0].files, function(key, file) {
$('.files').append('<li>' + file.name + '</li>');
data = new FormData();
data.append(file.name, file);
$.ajax({
url: $('.uploader').attr('action'),
contentType: 'multipart/form-data',
type: 'POST',
dataType: 'json',
data: data,
processData: false
});
});
});
Run Code Online (Sandbox Code Playgroud)
但是当我上传文件时,我在控制台中收到此错误:
webrick/server.rb:191:in `block in start_thread' ERROR ArgumentError: invalid %-encoding ("filename.jpeg" Content-Type: image/jpeg
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
我正在为带有appengine后端的应用创建前端上传.
我想要的是一个文件上传解决方案,我不想使用plupload或那些现成的解决方案.
我基本上将图像提交给iframe,然后在上传时盖上封面.然后,在完成后,我执行了一个ajax调用,以获取要渲染的下一个视图的图像ID.但是,在上传完成之前总是调用渲染,因此我没有从后端获取任何图像ID.谁能帮忙?
这是我上传的代码
perform_input3:(event)=>
event.preventDefault()
$('#product-input-3').hide()
$('#product-input-3').submit()
$('#upload-cover').show()
item_id = $('#item3_id').val()
app.views.imageselect.render(item_id)
Run Code Online (Sandbox Code Playgroud)
app.views.imageselect.render(item_id)如下:
render:(data)=>
@item_id = data
item_id = @item_id
$.ajax(
url: '/get_image_list/'
type: 'GET'
dataType: 'json'
data: {item_id: item_id}
success:(data) =>
@payload = data
$(@el).append imageSelectTemplate(@payload)
return @
)
Run Code Online (Sandbox Code Playgroud)
我不想使用setTimeout函数,因为它不会灵活,具体取决于连接速度.任何帮助将不胜感激 :)
我是一名网络开发人员.在我的脚本中使用header()来设置"Transfer-Encoding:chunked".和flush()到网页.它会在网页上分时打印.它工作正常.但是,当我使用jQuery.ajax()来请求this.it时总是输出所有(chunked unuseful).
怎么解决这个?在jQuery ajax中使用chunked编码?
有点卡在这一个,需要使用多部分表单上传图像和json ..不知道如何发送内容类型标题或上传图像..认为我需要转换为blob ..此刻我只是发送我从文件输入字段获得的数据.
任何建议都会非常感谢
$http({
method: 'POST',
url: URL,
headers: { 'Content-Type': false },
transformRequest: function (data) {
console.log(data);
var formData = new FormData();
formData.append("formatteddata", angular.toJson(data.model));
formData.append('media', Image)
return formData;
},
data: { model: shoutoutData, image: shoutoutImage}
}).
success(function (data, status, headers, config) {
alert("success!");
}).
error(function (data, status, headers, config) {
alert("failed!");
});
Run Code Online (Sandbox Code Playgroud) 我打算使用jQuery上传一个文件数组.
这个意图包含在一个名为的函数中uploadFilesUsingAjax();
var uploadFilesPromise = uploadFilesUsingAjax();
$.when(uploadFilesPromise).done(function (uploadFilesAjaxResult) {
// redirect to success page...
Run Code Online (Sandbox Code Playgroud)
在做其他事情之前,我需要等待所有文件成功上传.
里面uploadFilesUsingAjax(),
我这样写了我的代码
function uploadFilesUsingAjax() {
var files = pages; // pages is a global variable which is an array of files
var url = "/users/" + currentUser.id + "/files.json";
var type = "POST";
console.info('files length:' + files.length);
if (files.length > 0) {
var promises=[];
for (var i = 0; i < files.length; i++) {
var data = new FormData();
var postData …Run Code Online (Sandbox Code Playgroud) 我的问题是我使用 FormData 向服务器发送一个 Blob,但服务器没有得到它。代码如下所示:
Flask 服务器代码:
@app.route('/save-record', methods=['POST'])
def save_record():
app.logger.debug(request.form.keys()) #Shows only the title key, not the file key
Run Code Online (Sandbox Code Playgroud)
客户端JS代码:
var save = function() {
var form = new FormData();
form.append('file', record.blob, record.filename);
form.append('title', searchedObj.title);
//Chrome inspector shows that the post data includes a file and a title.
$.ajax({
type: 'POST',
url: '/save-record',
data: form,
cache: false,
processData: false,
contentType: false
}).done(function(data) {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud) jquery ×6
javascript ×5
ajax ×3
file-upload ×2
flask ×2
form-data ×2
forms ×2
php ×2
angularjs ×1
blob ×1
cakephp ×1
chunked ×1
coffeescript ×1
deferred ×1
handler ×1
html5 ×1
promise ×1
sequential ×1
upload ×1