【问题标题】:Ajax function learningAjax函数学习
【发布时间】:2014-09-24 23:14:46
【问题描述】:

我需要 Ajax 方面的帮助。 我在网上得到了这个代码。 这个功能是检查contact.php

我有几个问题希望有人可以帮助我。
我的问题:
1. 这段代码好不好并且可以运行?
2. 有人能解释一下第4行和第5行的函数是做什么的吗?它似乎将数据发送到contact.php,但它返回了什么?

阿贾克斯:

var validateEmailForm = {
dataType: 'json',
        submit: function(form) {
        var redirect = false;
         $.ajax('contact.php', {data:{'email':form.email.value}}).done(function(data) {
       if ( typeof(data) == 'object' ) {
                    if ( data.status == 'valid') {
                        form.submit();
                    } else if(data.status !=='valid' {     
               alert('The e-mail address entered is wrong.');
                      }
                } else {
                    alert('Failed to connect to the server.');
                    }
            }
        }
    }

联系方式.php:

<?php
error_reporting(0);

$email = $_POST['email'];
if (isset($_$POST['email']))
{
  // How to return valid to the ajax
} else {
  // How to return invalid to the ajax.
}

?>

【问题讨论】:

  • 回复:您的问题:1)“好”是主观的。 2) 试试看。
  • @Celeo ,我的问题是 PHP .. 我想知道如何将 data.status == valid 发送到 ajax .. 我一直在尝试但失败了,这就是我发帖的原因堆栈溢出。
  • 您是否尝试过添加调试语句来实际查看它返回的内容?
  • 您的问题得到满意答复了吗? 如果是,请选择一个接受的答案(或写下您自己的答案并接受)以结束问题。 如果不是,请发布其他信息,以便我们尝试提供帮助。

标签: php jquery ajax


【解决方案1】:

您需要将 JSON_encoded 数组返回给 ajax 函数,如下所示:

$email = $_POST['email'];
$status = false;
if (isset($_$POST['email']))
{
     $status = 'success'
} else {
     $status = false
}
echo json_encode(array('status' => $status));

?>

此外,将dataType: 'json' 添加到您的$.ajax() 以便延迟函数自动解析它。

删除typeof(),因为我们知道我们期望得到什么回报。

【讨论】:

  • 你能帮我解决数据类型 json 中的行吗?我是 JSON 新手,我只知道 ajax 和 php :(
  • 所以我需要更改我的 ajax 条件而不是 valid ,更改为 success & false?
  • 我刚刚用数据类型编辑了我的 ajax。请让我知道我是对还是错提前谢谢。
【解决方案2】:

AJAX 比听起来容易得多。你只需要看看几个很好的例子。

试试这些:

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1

https://*.com/questions/25945137/php-fetch-content-from-one-form-and-update-it-in-other-form/25954450#25954450


上面的例子说明了一些事情:

(1) AJAX 请求有四种格式 - 完整的$.ajax() 结构和三种快捷结构($.post()$.get()$.load()

在您非常擅长 AJAX 之前,我建议您使用格式正确的 $.ajax() 代码块,这就是上述示例所展示的内容。这样的代码块如下所示:

$('#formID').submit({
    $.ajax({
        type: 'post',
         url: 'contact.php', 
    dataType: 'json',
        data: 'email=' + form.email.value
    }).done(function(data) {
        if ( typeof(data) == 'object' ) {
            if ( data.status == 'valid') {
                form.submit();
            } else if(data.status !=='valid' {     
                alert('The e-mail address entered is wrong.');
                return false;
            } else {
                alert('Failed to connect to the server.');
                return false;
            }
        }
    });
});

(2) 在$.ajax() 代码块中,data: 行指定发送到 PHP 处理器文件的数据。

(3) dataType: 行指定 ajax 代码块希望从 PHP 处理器文件接收回的数据类型。除非另有说明,否则默认数据类型为 html。

(4) 在 PHP 处理器文件中,数据通过echo 命令返回到 AJAX 代码块。无论该数据是以 html、文本还是 json 形式返回的,它都会被 echoed 返回到 AJAX 例程,如下所示:

<?php

//perform MySQL search here. For eg, get array $result with: $result['firstname'] and $result['lastname']

$out =  '<div id="myresponse">';
$out .= 'First Name: <input type="text" value="' .$result['firstname']. '" />';
$out .= 'Last Name: <input type="text" value="' .$result['lastname']. '" />';
$out .= '</div>';

echo $out;

请亲自尝试上面的几个例子,你会看到它是如何工作的。

发送/返回数据不必使用json。但是,json 是发送 array 数据的有用格式,但是如您所见,您可以在 PHP 端构造完整的 html 响应并回显完成标记。


所以,要明确回答您的第二个问题,您只需要echo 回复一些数据。 PHP 文件的工作是:

(1)从AJAX例程接收数据,

(2) 在某种查找中使用该数据(通常在数据库中),

(3) 构造一个响应,并且

(4) echo (NOT return) 对 AJAX 例程的 success:.done() 函数的响应。

【讨论】:

  • 这些是回声?我正在寻找像 OhGodWhy 发布的那样返回的 PHP 中的价值威慑。
  • 查看更新的答案。 请尝试顶部包含的简化示例。 请注意,json 是发送数组数据的一种很好的格式,但它引入了一定程度的复杂性,这在您的 AJAX 职业生涯中可能不是必需的。