2

我有以下客户端代码从手机上传图片

$("#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 配置有问题吗?

4

3 回答 3

3

所以我得到了这个工作......令人惊讶的发现!

当我将 dataType: 'jsonp' 更改为 ('json' 或 'text') 时,formdata 在 $_POST 中通过。

仅当 dataType: 'jsonp' 由于某些未知原因导致表单数据通过 $_GET 或 $_REQUEST

不知道为什么一定会发生这种情况;但现在我的问题用'json'解决了。

于 2012-05-30T09:52:27.057 回答
1

据我所知,序列化表单不包括文件。如果您使用的是 PhoneGap,为什么不使用他们提供的 File API 来上传文件?

为了将表单变量与文件一起发送,只需添加一个带有选项的参数数组

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);
于 2012-05-28T13:50:37.327 回答
0

在期望 JSONP 作为响应的同时发送 POST 请求是不可能的。由于 JSONP 只是获取请求,它将脚本嵌入到您的 dom 中。

这就是 ajax 调用在 jquery 中的工作方式,这也解释了 ——'即使在明确提到类型之后:“POST”数据也是在 GET 中接收的'

于 2013-05-18T20:45:38.110 回答