用php在ajax中发布给我未定义的索引

时间:2018-12-14 05:44:52

标签: javascript php jquery ajax post

我想通过(从ajax到php)从客户端向服务器发送/传递数据,但是当我尝试此代码时

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
y_encoded = le.fit_transform(y)
fit = rte.fit(X, y_encoded)

在我的浏览器中,我得到了 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript"> $.ajax({ type: 'post', url: 'loo.php', data: { data: 'some data' }, success: function(response,w) { console.log(w); } }); </script> <?php echo $_POST['data']; ?> 的打印输出,这意味着javascript代码可以正常工作了,在php中,我得到了success p.s我的文件名为Undefined index,所有代码都在同一个文件中

编辑:我试图这样分隔文件:

  

我的loo.php文件:

loo.php
  

我的test.php文件:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script type="text/javascript"> $.ajax({ type: 'post', url: 'test.php', data: {data: 'some data'}, success: function (response, w) { console.log(w); } }); </script>

仍然有未定义的索引

p.s。运行loo.php文件后,我浏览手册至test.php文件

5 个答案:

答案 0 :(得分:1)

您收到此错误,因为在加载页面时尚未发送POST请求。因此,仅在提交的data存在时显示它,否则,显示JavaScript代码。

<?php
if (isset($_POST['data'])) {
    die($_POST['data']);
}
?>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
    type: 'post',
    url: 'loo.php',
    data: {data: 'some data'},
    success: function (response, w) {
        console.log(w);
    }
});
</script>

答案 1 :(得分:0)

尝试一下。

<?php 
    $data = json_decode(file_get_contents('php://input'), true);
    echo $data['data'];
?>

答案 2 :(得分:0)

尝试一下

HTML文件

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="data_value"></div>

<script type="text/javascript">

$( document ).ready(function() {

    $.ajax({  
        type: 'post',  
        url: 'loo.php', 
        data: { data: 'some data' },
        success: function(response,w) {

          $("#data_value").html(response);
        }
    });

});

PHP文件(loo.php)

<?php
print_r($_POST);
?>

答案 3 :(得分:0)

尝试以这种方式更改处理程序:

    if(isset($_POST['data'])){
        function return_data() {
            die(json_encode($_POST['data'])));
        }
        return_data();
    }

答案 4 :(得分:0)

在编辑问题后回答:

$ _ POST是HTTP Post请求发送的数组。因此,如果对名为test.php的页面的请求或非HTTP POST请求的请求,则$ _POST数组为空。但是如果您发送了$ _GET数组,它们可能会有一些数据。 除非您使用带有method =“ post”的表单,否则导航至页面是对该页面的获取请求。 所以您使用ajax调用所做的是正确的。但是在没有带post方法的表单的情况下手动导航到test.php不会填充$ _POST数组。 因为当您进行Ajax调用时,它就完成了,它只是正确地进行了后调用,并且一切正常,但是当您导航到该页面时,它是一个get请求,并且不会填充$ _POST数组。 为此,您根本不需要ajax。你可以有这个表格

<form method="POST" action="test.php">
    <input type="text" name="data" value="some data" />
    <input type="submit" value="submit" />
</form>

因此您可以使用ajax并处理要在ajax成功方法中处理的任何内容。或使用表格将请求发送到页面并在那里处理。


修改前问题的答案

如果它们在同一个文件中,将无法正常工作,因为在文件加载时,$ _ POST ['data']根本不存在,并且在运行ajax之后呼叫,它存在于该呼叫中,而不是在您的浏览器窗口中。

因此您可以检查$ _POST ['data']是否存在,以便通过ajax调用发送它,以便可以将其返回并在ajax成功函数中使用它。

结论:

您不能将它们放在同一文件中,并期望ajax在实际的php之前加载。 它将首先加载整个文件,然后将运行ajax 未定义的索引来自服务器,甚至没有看到HTML页面。

解决方案可能是:

带有html和ajax函数index.html的文件

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
  $.ajax({  
    type: 'post',  
    url: 'loo.php', 
    data: { data: 'some data' },
    success: function(response,w) {
       // use the response here
       console.log(w);
    }
});
</script>

和另一个与您的逻辑loo.php

<?php
header("Content-Type: text/plain"); // if you want to return a plain text
// if you want to return json it could be header('Content-type: application/json');
echo isset($_POST['data'])? $_POST['data']: ''
?>