Phonegap,jQuery ajax帖子不工作

时间:2012-05-28 12:11:49

标签: jquery ajax post file-upload cordova

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

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

3 个答案:

答案 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'

中收到