我有以下客户端代码从手机上传图片
$("#placeorder").click(
function() {
if ($('#placeorderform').valid()) {
var formData = $('#placeorderform').serialize();
formData += "&uploaded="+ imgData;
$.ajax({
type : "POST",
url : _host+ "/addorder.php",
data : formData,
dataType : 'jsonp',
success : onSuccess,
error : onError
});
}
});
服务器端PHP(不工作)
$encodedData = str_replace(' ','+',$_POST['uploaded']);
服务器端PHP($ _REQUEST或$ _GET有效;但对于小图片)
$encodedData = str_replace(' ','+',$_REQUEST['uploaded']);
我的客户端代码有什么问题。
我试图检查请求标头并发现了令人惊讶的结果。当我在浏览器中执行ajax时,数据在POST中被接收。但是从Phonegap中,即使明确提到类型:“POST”,数据也会在GET中收到。
有人可以对这些行为有所了解:(我的Phonegap配置有问题吗?
答案 0 :(得分:3)
所以我得到了这个......令人惊讶的发现!!!
当我将dataType:'jsonp'更改为('json'或'text')时,formdata会在$ _POST中进行。
只有当dataType:'jsonp'表格数据出于某些未知原因时才会通过$ _GET或$ _REQUEST
不知道为什么一定要发生这种情况;但是现在我的问题已经通过'json'解决了。
答案 1 :(得分:1)
据我所知,序列化表格不包含文件。如果您使用的是PhoneGap,为什么不使用他们提供的文件API来上传文件?
为了将表单变量与文件一起发送,只需添加带有选项
的params数组var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1);
options.mimeType="text/plain";
var params = new Object();
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(fileURI, "http://some.server.com/upload.php", win, fail, options);
答案 2 :(得分:0)
在期待JSONP响应的同时发送POST请求是不可能的。因为JSONP只是获取请求,它将脚本返回到你的dom中。
这是ajax在jquery中调用的方式,这也解释了 - '即使明确提到类型:“POST”,数据也会在GET'
中收到