无法在php中发布FormData

时间:2014-06-25 22:02:22

标签: javascript php jquery ajax form-data

我正在尝试在PHP中使用已发布的FormData形式的AJAX调用,但我无法检索变量。 我做错了什么?

这是我的Javascript

var sendData = new FormData();
sendData.append('itemid',$('select#selectItems').val());
sendData.append('itemtitle',$('#item-title').val());
sendData.append('itemtext',$('#item-text').val());

$.ajax({
    url: 'ajax.file.php',
    type: 'POST',
    dataType: 'text',
    data: sendData,
    cache: false,
    contentType: false,
    processData: false
});

和我的PHP

$itemid = $_POST['itemid'];
echo $itemid;

总是在PHP中未定义!

如果我是print_r($ _POST);

如果我使用Firefox,则PHP文本为:

  

数组([----------------------------- 12850217581176488271638880149 Content-Disposition:_form-data; _name] =>“ itemid“99 ----------------------------- 12850217581176488271638880149 Content-Disposition:form-data; name =”itemtitle“The Title - --------------------------- 12850217581176488271638880149 Content-Disposition:form-data; name =“itemtext”Text ------- ---------------------- 12850217581176488271638880149--)

...使用Chrome,PHP响应是:

  

数组([------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:_form-data; _name] =>“itemid”99 ------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:form-data; name =“itemtitle”标题------ WebKitFormBoundarypyFlwBB31gVYXxRP Content-Disposition:form-data; name =“itemtext”Text ------ WebKitFormBoundarypyFlwBB31gVYXxRP--)

感谢

4 个答案:

答案 0 :(得分:0)

试试这个:



$.ajax({
.
.
beforeSend: function(xhr) {
        xhr.setRequestHeader('Content-Type","application/json');
    }
.
.
});




或者:



$.ajax({
    .
    .
    .
    headers: {"Content-Type","application/json"}
});




答案 1 :(得分:0)

看来你已经过时了jQuery。 检查您的jQuery版本,因为您在ajax请求构造函数中使用的重要参数 processData 可从1.6版获得。

  

从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。

为此,请打开浏览器控制台并输入:

jQuery.fn.jquery

我有jQuery 1.4,这段代码适合我:

var file = $('.rm-action-popup-input[name=file]').attr('files')[0];
var formData = new FormData();
formData.append('file', file);
formData.append('title', params.title);
var xhrForm = new XMLHttpRequest();
xhrForm.open("POST", "/upload.php");
xhrForm.send(formData);

检查Content-Type标头的外观: right version

答案 2 :(得分:0)

我遇到了同样的问题。当我没有设置Content-Type属性(我使用javascript)时,它起作用了。

然后浏览器显示(在使用Chrome调试的Request Header中):
内容类型:multipart / form-data;边界= ---- WebKitFormBoundarygfXi4NfQAXa8g7PU

并且var_dump($ _ POST)向我展示了我想要的东西:
array(2){[“user”] => string(4)“test”[“pwd”] => string(7)“testpwd”}

答案 3 :(得分:0)

我用 fetch 来解决它

const options = {
  method: 'POST',
  body: formData,
};
fetch('/API', options).then(function(resp) {
    console.log(resp);
    if(resp.ok) {

        resp.json().then((data) => {
            console.log(data);
            if (data.error) {

            }else{
               console.log(data);
            } // ok
        });
    } else {
        console.log('Respuesta de red OK pero respuesta HTTP no OK');
    }
}).catch(function(error) {
  console.log('Hubo un problema con la petición Fetch:' + error.message);
});