为什么我不能从PHP获取JS中的json数据?

时间:2016-10-19 16:25:48

标签: javascript php jquery json ajax

我尝试上传文件并通过PHP从中获取一些已处理的数据,但我遇到了一些问题。这是我的简化代码。

HTML CODE

<form action="ajax.php" method="post" enctype="multipart/form-data">
<input type="file" name="mypic"> 
<input type="submit" value="upload" id="submit"> 
</form>

JS CODE

$(function(){
    var button = $('#submit');
    button.click(function(){
        alert("You clicked!");
        getdata();
    });

})
function getdata(){
    function onDataReceived(data) {
        alert("Get the data!");
    }
    $.ajax({
        url : "ajax.php",
        method : 'GET',
        cache : false,
        dataType : 'json',
        success : onDataReceived
    });
}

ajax.php

<?php
    $filepath = $_FILES["mypic"]["tmp_name"];   
    $filename = $_FILES["mypic"]["name"];

    SOME CODE HRER;

   $mech_para = "Hello";
   $json = json_encode(array("mech_para"=>$mech_para));

   echo $json;
?>

点击提交按钮后,页面将跳转到ajax.php,显示{&#34; mech_para&#34;:&#34; Hello&#34;},但没有提醒:获取数据!

但如果我删除ajax.php中的前两行

<?php
        SOME CODE HRER;

       $mech_para = "Hello";
       $json = json_encode(array("mech_para"=>$mech_para));

       echo $json;
?>

结果变得完全正常,页面跳转到ajax.php并显示正确的数据,并且警报(获取数据!)也显示。

我不知道导致此结果的原因及解决方法,如果ajax和GLOBAL VARIABLE _FILE 之间存在任何冲突,我会徘徊,或者如果有任何其他方式我可以处理文件并返回我想要的数据 非常感谢!

2 个答案:

答案 0 :(得分:3)

因为你只是在确定成功。你告诉jQuery期待JSON,你发送的几乎肯定不是json。

您正在执行GET请求,这意味着$_FILES包含任何内容都是不可能的。这意味着您正在为未定义的索引生成PHP警告

你的jquery调用没有error处理程序,所以jquery甚至不能告诉你它没能解码它收到的这个(损坏的)json。

从不 EVER 在处理外部资源时假设成功。总是假设失败,检查失败,并将成功视为一个惊喜。这意味着你需要

$.ajax(
   ....
   error : function(jqerr, msg) {
      alert('ajax request failed: ' + msg);
   }),
   c....
);

答案 1 :(得分:1)

您必须阻止表单提交,并实际发送该文件。

<form id="myForm" action="ajax.php" method="post" enctype="multipart/form-data">
    <input type="file" name="mypic"> 
    <input type="submit" value="upload" id="submit_button"> 
</form>

然后

$(function(){
    $('#myForm').on('submit', getdata);
});

function getdata(e){
    e.preventDefault();

    function onDataReceived(data) {
        alert("Get the data!");
    }

    $.ajax({
        url         : "ajax.php",
        method      : 'POST',
        contentType : false,
        processData : false,
        data        : new FormData(this),
        dataType    : 'json',
        success     : onDataReceived
    });
}