【问题标题】:Trying to send a value from JS to PHP - JQuery's $.ajax() method is not working尝试将值从 JS 发送到 PHP - JQuery 的 $.ajax() 方法不起作用
【发布时间】:2016-09-01 21:42:51
【问题描述】:

我想在提交 PHP 表单时执行一个 JS 函数,并从该函数返回一个值(基于用户的输入)给 PHP,我想在其中回显它。

这是一个 SSCCE。在真实的代码中,不仅仅是回显值,而且值是一个 JSON 对象。

以下是我的代码。 问题是$.ajax(); 部分不起作用。在alert(name); 之后,浏览器中没有任何反应。 为什么这不能正常工作?我该如何解决这个问题?

来自 index.php:

<form id="form">
  Name:
  <input id="name" type="text" />
  <input type="Submit" value="Go" />
</form>

来自 scripts.js:

$(document).ready(function() {

    $("#form").submit(function(event) {
        event.preventDefault();

        var name = $("#name").val();
        alert(name);

        $.ajax({
            type:'POST',
            url:'echo.php',
            data: {
                nameEntered : name
            }
        });

    });

});

echo.php:

<?php  
if (    isset($_POST["nameEntered"]) && !empty($_POST["nameEntered"])    ) {
    echo $_POST["nameEntered"];
} else {
    echo '$_POST["nameEntered"] is not set.';
}
?>

编辑:

控制台:

网络:


编辑 2:

将以下内容添加到$.ajax()

,
success: function(){
    alert("success");
},
error : function(){ 
    alert("error");
}

我收到一条警告说success,但浏览器从不指向 echo.php =s


编辑 3:

在提示success 之后,? 会添加到浏览器中的 URL。最初的 URL 是http://localhost/Test12/index.php,后来改为http://localhost/Test12/index.php?

【问题讨论】:

  • 你在控制台看到什么错误?
  • 在控制台中你看到了吗?由于您没有定义 success 回调,因此 什么都不会发生
  • 他仍然可以看到响应页面的php输出。 JS中什么都没有。您是否在脚本之前在页面上包含了 jQuery 库?
  • submit(function() { 这里事件丢失 submit(function(event) {
  • 可能是权限问题?你能在没有 ajax 调用的情况下运行你的 PHP 脚本吗?喜欢直接在浏览器中访问它,比如localhost/echo.php ?

标签: javascript php jquery ajax post


【解决方案1】:

这种方式应该会显示响应。

JAVASCRIPT

$("#form").submit(function(event) {
    event.preventDefault();

    var name = $("#name").val();
    //alert(name);

    $.ajax({
        type:'POST',
        url:'http://localhost/Test12/echo.php',
        data: {
            nameEntered : name
        },
        success : function(data){
            console.log(JSON.parse(data));
        },
        error : function(error){
            console.log('erro', error);
        }
    });

});

PHP

<?php  

if (isset($_POST["nameEntered"]) && !empty($_POST["nameEntered"])) {
    $name = array("nome" => $_POST["nameEntered"]);
    echo json_encode($name);
} else {
    echo '$_POST["nameEntered"] is not set.';
}
?>

【讨论】:

  • 我这样做了。控制台仍然是空的,这增加了混乱。另外,this pagesuccess可选的
  • 是可选的,但是你需要一个承诺,如果你的请求失败或成功,可能不是成功函数,但至少是一个完成函数,如果仍然清空控制台,问题可能是在php文件中
  • 好的,我从您添加的函数中删除了dataerror 参数,并将console.log() 语句分别更改为alert("success");alert("error"); 语句。我收到警报说“成功”。但是这个浏览器永远不会指向echo.php =s
  • 所以错误在你的 php 文件中,因为如果你成功了,这意味着你将 js 通信到你的服务器
  • 我不是瞎猜,错误在url中,你需要指定你的php文件所在的url,这样ajax可以发送请求,php返回响应,所以每个更改您需要查看网络选项卡的代码,以查看您的应用是否将请求发送到正确的路径。您正在运行服务器吗?
【解决方案2】:

作为测试,请将您的 echo.php 替换为:

<?php  
    echo 'Incoming = ' .$_POST["nameEntered"]. "/r/n";

    if (isset($_POST["nameEntered"]) && !empty($_POST["nameEntered"])) {
        echo 'Here 01';
    } else {
        echo 'Here 02';
    }
?>

【讨论】:

  • 我将echo 'Here 01'; 更改为echo $_POST["nameEntered"];,我在警报中得到了正确的值。这行得通。之前有人在答案中说过我必须使用return 语句而不是echo。我正在这样做。但我想我不必那样做。非常感谢,非常感谢
【解决方案3】:

尝试删除 document.ready() 或代替 .submit 使用 .on('submit', function(e){});或者添加绝对路径'/page.php'

【讨论】:

  • .submit 更改为 `.on('submit', function(e){});` 并没有改变任何东西。删除document.ready() 会在单击提交后立即重新加载页面
  • 添加绝对路径怎么样?
  • 尝试只添加一个斜杠'/page',以防你尝试了完整路径,否则最后一个选项,可能不会有所作为,但你是否尝试将缓存设置为 false 并在 js 文件中的 nameEntered 周围加上引号?
【解决方案4】:

我认为您需要在提交函数中添加“事件”作为参数,除了成功调用以显示结果

【讨论】:

  • 做到了。没有运气。
  • 所以我无法评论其他答案,但您是否尝试添加 JSON.stringify({ nameEntered : name })
【解决方案5】:

这会给你带来什么:

$.ajax({
    type:'POST',
    url:'echo.php',
    data: {
        nameEntered : name
    },
    success: function(recd){   // <-------
        alert(recd);           // <-------
    },
    error : function(){ 
        alert("error");
    }
});

【讨论】:

  • 具有空白字符串的警报
  • 啊哈!这告诉你一些事情——从 PHP 中回显的数据也是空白的。在单独的答案中查看新测试。
  • “从 PHP 中回显的数据也是空白的” - 答案中没有人说过我必须使用 return 而不是 echo。我在 echo.php 中使用了 return 语句
【解决方案6】:

您正在调用 event.preventDefault(),但您未能将事件添加到回调的参数中......因此您实际上并没有阻止提交表单。这就是您在地址栏中看到问号的原因。

试试:

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

【讨论】:

  • 不,我后来添加的。让我反思一下。应该已经有了,我的坏
猜你喜欢
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多