如何在这个特定的代码中提取Ajax返回的信息?

时间:2013-08-13 19:10:34

标签: javascript jquery

我在客户端有这个代码:

this.formValidation = function() {
        // Parse forms
        $('.submit.btn').on('click', function(){
            $(this).closest('form').submit();
        });
        $.each($('form.validate'), function(){
            $(this).validate({
                submitHandler: function(form) {
                    var data = $(form).serializeArray();
                    var action = $(form).attr('action');
                    $.ajax({
                        method: 'post',
                        dataType: 'json',
                        url: action,
                        data: data,
                        success: function(d) {
                            // Prepare the message
                            var message = '';
                            $.each(d, function(k, m){
                                var messageType = 'boolean' === $.type(m.status) ? (m.status?'success':'error') : m.status;
                                message += '<div class="alert alert-'+messageType+'">'+m.message+'</div>';
                            });
                            // Replace the form with the message
                            $(form).replaceWith($(message));
                        },
                        error: function() {
                            var error = $('<div class="alert alert-error">error </div>');
                            $(form).replaceWith(error);
                        }
                    });
                }
            });
        });
    };

支持的消息类型是:'成功'和'错误',用于加载样式的CSS

和服务器中的此代码:

     $d= array(
 'status' => 'success',
 'm.status'=> 'success',
 'message'=>'success'
 );
    echo json_encode($d);
?>

但它没有返回成功消息。我应该如何在服务器端形成阵列?

我知道它进入了代码的成功部分,但我不知道如何在服务器端编写变量。

不应该更改JavaScript代码,我只需要修改服务器php。 我怎么能这样做?

我也有几个问题:

  1. 服务器php中的变量名是否应该与函数内的变量名相同?在这个例子中当我回显$ d应该是success: function(d) {还是我也可以使用其他名字?它们甚至是相关的吗?

  2. function(k, m){中的变量'k'和'm'何时来自?你能解释一下这个功能是做什么的吗?

2 个答案:

答案 0 :(得分:0)

开始一个longest mile(dunno,如果它被称为,但它坚持我)女巫是你做console.log('something');从哪里你应该看到的东西,并逐步向后移动执行,直到你做看到一些东西,很好的方法来隔离问题。

此外,如果您使用Google Chrome,开发工具有一个很好的网络选项卡,您可以看到ajax请求及其返回的内容。也许它返回了错误500?

通过这种方式,您可以轻松诊断任何ajax呼叫。

关于你的问题:

  1. 不,所有jQuery参数都是为结果命名变量。所以你可以说出任何名称,我通常会亲自使用resp

  2. 每个参数都引用“key”和“value”(在这种情况下,使用m,就像上面一样)。阅读here了解更多信息。

答案 1 :(得分:0)

解决,

我不得不使用多维数组来响应json。

服务器端的正确代码是:

  $d=array(
    array(
    'status'=>'success',
    'message'=>'mail sent'
    ),
    array(
    'status'=>'info',
    'message'=>'thank you!'
    )

   );
 //Set JSON header
 //warning : UTF-8 byte order causes the Cannot modify header information error !!!!
  header('Content-type: application/json');
    echo json_encode($d);