【问题标题】:Phonegap, jQuery ajax post not workingPhonegap,jQuery ajax 帖子不起作用
【发布时间】:2012-06-02 19:27:31
【问题描述】:

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

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

【问题讨论】:

  • 如果它只适用于“小图像”,那么您的客户端代码就可以了 - 听起来更像是对您的帖子施加了文件大小限制。
  • 谢谢。但是相同图像的发布失败;使用 get 或 request 类型时有效。

标签: jquery ajax post file-upload cordova


【解决方案1】:

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

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

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

不知道为什么会这样;但现在我的问题已经用 'json' 解决了。

【讨论】:

    【解决方案2】:

    据我所知,序列化表单不包括文件。如果您使用的是 PhoneGap,为什么不使用他们提供的 File 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);
    

    【讨论】:

    • 连同要上传的文件,我需要将表单数据提交到一个php文件。我可以使用 Phonegap 中的 FileTransfer API 发送序列化的表单数据和文件以上传吗?
    • 我试过了,但还是不行。我的 Andriod 项目配置似乎有些问题。 ft.upload()、$.post() 和 $.get() 这些都不会调用服务器,也不会调用它们各自的成功和错误回调函数。只有 $.ajax() 有效,但在 $_GET 而不是 $_POST 中接收数据
    • 似乎您的 PHP 代码有问题。您是否通过简单的 HTML 表单测试过表单发布?
    • 是的,已经测试过创建简单的html表单;在这里发布作品。仅当从我的 ajax 代码调用时,帖子才会一无所获。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多