繁体   English   中英

使用AJAX的jQuery / PHP调用不起作用

[英]JQuery / PHP call with AJAX not working

我一直在尝试获得这个非常简单的示例,该示例将AJAX与JQuery和PHP结合使用时没有运气( 这是示例页面 )。 我看过很多标题相似的帖子,但都没有帮助...

我已经完全复制了代码,但是从来没有调用过应该成功运行的函数。 作为实验,在对$ .post的调用中,我注释掉了数据部分({sendValue:str})和JSON部分,并在成功函数的主体中添加了一个警报,以查看它是否被调用。 所以我猜我创建数据的方式有问题吗? 我还尝试在警报中显示从AJAX调用返回的数据,并将其显示为“未声明”(data.returnValue)。

这是我的代码的副本,您可以通过上面的链接查看完整的示例,也可以从此处的教程作者那里获得一个工作示例: http : //www.devirtuoso.com/Examples/jQuery-Ajax/

jQuery的:

        $(document).ready(function(){
            $('#txtValue').keyup(function(){
                sendValue($(this).val());
            });
        });

        function sendValue(str){
            $.post("ajax.php",
                   { sendValue: str },
                   function(data){
                       $('#display').html(data.returnValue);
                   },
                    "json"
            );
        }

PHP:

<?php

//Get Post Variables. The name is the same as
//what was in the object that was sent in the jQuery
if (isset($_POST['sendValue'])){
    $value = $_POST['sendValue'];  
}else{
    $value = "";
}

//Because we want to use json, we have to place things in an array and encode it for json.
//This will give us a nice javascript object on the front side.
echo json_encode(array("returnValue"=>"This is returned from PHP : ".$value));

?>

HTML:

    <body>

    <p>On keyup this text box sends a request to PHP and a value is returned.</p>

    <label for="txtValue">Enter a value : </label><input type="text" name="txtValue" value="" id="txtValue">

    <div id="display"></div>

</body>

谢谢!

编辑:我将$ .post改写为带有错误功能的$ .ajax。 我肯定是在点击错误函数,错误是一个解析错误-我猜这是我调用json_encode时来自我的PHP脚本的...这是萤火虫的屏幕截图-任何人还有其他想法吗?:

屏幕截图1-Firebug控制台

屏幕截图2-Firebug监视窗口

Firefox控制台的屏幕抓取观看错误功能的屏幕截图

到目前为止,感谢您提供的所有帮助,非常感谢。

我注意到var str = $('#txt').val(); 会给您一个错误,因为$('#txt')不存在,它应该是$('#txtValue')

查看完您的代码后,一切看起来都应该正确,下一步是尝试通过使用JavaScript中的console.debug()和PHP中的某些echo来调试代码。 我建议您获取适用于Chrome / Firefox的Firebug,如果使用IE升级到IE9并使用其开发人员工具,则建议使用。 使用上述工具可以使您更好地了解代码的执行方式。

我的第一步是确保启动键盘:

 $(document).ready(function(){
        $('#txtValue').keyup(function(){
            alert('keyUp');
            sendValue($(this).val());
        });
 });

第二步是确保sendValue被触发:

function sendValue() {
    alert('sendValue');
    var str = $('#txt').val();
    tmr = null;


    $.post(
        'test.php', 
        { sendValue: str }, 
        function(data) { 
            alert('inside post');
            $('#output').html(data.returnValue); 
        }, 
        'json'
    );
}

在看不到您的各种元素输出的更多信息的情况下,我认为无法告诉您要解决的问题,但是此示例与您的示例相似(尽管它是一个多合一的PHP文件,而不是您的示例中的两个文件) )。 我还添加了一个350ms的超时时间,以允许用户键入内容而无需页面在每次击键时都进行AJAX请求。 一旦他们暂停,它将获取数据。

源代码到test.php

<?php

if(isset($_POST['sendValue']))
{
    echo json_encode(
        array('returnValue' => 
              'Returned: ' . $_POST['sendValue']));
    exit();
}

?>
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>AJAX Sample</title>
</head>
<body>

<input type="text" id="txt" />
<div id="output"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" 
    type="text/javascript"></script>
<script type="text/javascript">

var tmr = null;

$(function () {
    $('#txt').keyup(function() {
        if(tmr != null)
            clearTimeout(tmr);
        tmr = setTimeout("sendValue()", 350);
    });
});

function sendValue() {
    var str = $('#txt').val();
    tmr = null;

    $.post(
        'test.php', 
        { sendValue: str }, 
        function(data) { 
            $('#output').html(data.returnValue); 
        }, 
        'json'
    );
}
</script>
</body>
</html>

对于来到这里寻找类似问题答案的任何人:

我尝试了一些事情来弄清楚发生了什么,调试消息等,一切看起来都很好。 然后,我将代码部署到运行apache的虚拟盒子和Web服务器上,以查看是否属于环境问题。 我的代码可以在我的Web服务器和虚拟机上使用。 然后,我意识到在开发系统上有两个相互矛盾的PHP安装。 我不知道为什么,但是这是导致问题的原因,但是将它们回滚并在开发系统上重新安装WAMP可以解决问题。

尝试这个

$(document).ready(function(){ 
    $('#txtValue').keyup(function(){ 
        $.post("ajax.php",{ sendValue: str },   function(data){ 
        $('#display').html(data.returnValue); 
    }, 
    "json" 
    ); 
}); 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM