首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能从PHP获得JS中的json数据?

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

Stack Overflow用户
提问于 2016-10-19 16:25:47
回答 2查看 109关注 0票数 1

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

HTML代码

代码语言:javascript
复制
<form action="ajax.php" method="post" enctype="multipart/form-data">
<input type="file" name="mypic"> 
<input type="submit" value="upload" id="submit"> 
</form>

JS码

代码语言:javascript
复制
$(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

代码语言:javascript
复制
<?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;
?>

单击submit按钮后,页面将跳转到ajax.php,显示{"mech_para":"Hello"},但没有警告:获取数据!

但是,如果我删除ajax.php中的前两行,如下所示

代码语言:javascript
复制
<?php
        SOME CODE HRER;

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

       echo $json;
?>

结果完全正常,页面跳转到ajax.php并显示正确的数据和警报(获取数据!)同时也展示了。

我不知道是什么导致了这个结果,也不知道如何解决,如果ajax和全局变量_FILE之间有任何冲突,我会漫游,如果有其他方法可以处理文件并返回我想要返回的JS数据,那么还是。非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-19 16:39:34

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

代码语言:javascript
复制
<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>

然后

代码语言:javascript
复制
$(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
    });
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-19 16:30:40

因为你只是在假设成功。您告诉jQuery要期待JSON,您发出的几乎肯定不是json。

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

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

永远不要在处理外部资源时假定成功。总是假设失败,检查失败,并把成功当作一个惊喜。这意味着你需要

代码语言:javascript
复制
$.ajax(
   ....
   error : function(jqerr, msg) {
      alert('ajax request failed: ' + msg);
   }),
   c....
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40136884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档