Ajax Post请求在移动设备上不起作用

时间:2019-12-10 04:57:24

标签: javascript android jquery ios ajax

我遇到一个问题,我在jQuery中的 .on('click')事件之后向服务器发送了Ajax发布请求,但是Ajax请求在移动设备上不起作用。在桌面设备上,它可以正常工作。那使我进行了一些研究。我发现的第一个问题是click事件可能未在触摸屏设备上注册,但这不是问题。当我在移动设备上触摸按钮时,发出一些警报消息后触发了触摸事件。在iOS和Android设备上,都会触发触摸事件,但不会触发Ajax请求。我还添加了 touchstart ,以确保事件将在触摸设备上触发。我研究的另一个潜在问题是,如果您未指定发布请求后从服务器返回的预期数据类型(纯文本,json等等),则iOS和Android设备上可能存在一些问题。我指定了dataType,但请求仍然存在问题。最后,我看到可能存在一些缓存问题,因此我将cache参数设置为false并在 no-cache 指定的标头中。这也没有解决问题。使用我尝试的每个“修复”,Ajax请求仍然可以在桌面设备上完美执行,但不能在移动设备上完美执行。如前所述,单击事件本身是在移动设备上注册的,因为当我在Ajax请求之前发出警报时,它们已显示在移动设备上。但是,Ajax请求本身不会执行。这是我的代码如下:

$('.crop_image').on('click touchstart', function(event){
    alert("Triggered"); //Event triggered on mobile devices
    $image_crop.croppie('result', {
        size: 'viewport',
        format: 'png',
        type: 'blob'
   }).then(function (blob){
        $form = $('#uploadForm');
        var fd = new FormData($form);
        fd.append('upload_image', blob);
        $.ajax({
            url: "handle-image.html",
            type: "POST",
            data: fd,
            processData: false, //processData false
            contentType: false, //contentType false
            dataType: "text",  //response will be text
            cache: false,  //cache false
            headers: {
                "cache-control": "no-cache" //set headers
            },
            success: function (data){
                alert("Upload Successful"); //Only succeeds and executes on desktop
                $('#uploadImageModal').modal('hide');
                $('#uploaded_image').html(data);
            }
        });
    })
});

我很困惑为什么在移动设备上失败了。我发现一个问题可能是我正在通过Ajax发送blob,也许移动设备无法处理blob格式,但是经过进一步的审查,我发现没有证据支持这一点。这就是为什么我想知道我在这里可能会缺少什么。附带一提,我的表单与Button不在同一位置,因为我的Button在模式中。由于我使用的是表单数据,因此我假设实际表单中没有提交按钮不会引起问题,同样,在台式机和笔记本电脑设备上这也不是问题。

1 个答案:

答案 0 :(得分:0)

这是multipart / form-data,因此我需要更改enctype。这就是为什么我在某些设备上遇到问题的原因,并且自发布以来,该问题已得到解决。在ajax请求中,我只需要添加:

enctype: 'mutipart/form-data',

这解决了问题。