JSON使用jQuery $ .ajax post类型返回null

时间:2012-01-05 15:31:22

标签: jquery ajax json null

使用jquery从json post接收null。请按顺序查看下面的代码。

用户填写此表单并提交:

<form name="newsletterSignup" id="newsletterSignup" method="post">

        <input type="text" name="firstName" id="firstName" type="text" autocomplete="off" placeholder="Enter your name" />

        <input type="text" name="email" id="email" type="text" autocomplete="off" placeholder="Enter a valid email address"/>

        <input type="submit" name="newsletterSubscribe" id="newsletterSubscribe" value="Sign me up now!" /> 

    </form>

然后运行:

var BASE_URL = 'http://www.thegurucoder.com/';

$('#newsletterSignup').submit(function()
{

    var ajaxURL = BASE_URL + '_php/ajax/newsletterSubscribe.php';

    $.ajax({
        type: 'POST',
        url: ajaxURL,
        data: { firstName:$('#newsletterSignup #firstName').val(), email:$('#newsletterSignup #email').val()},
        dataType: 'json',
        success: function(data){

            alert(data);

            if(data.redirect == 'true')
            {

                window.location = data.url;

            }
            else
            {

                $(this).notify({prependTo:'#master', type:'negative', message:data.message, delay:3200, animation:'slide'});

            }

        }
    });

    return false;

});

反过来运行这个:

function newsletterSubscribe()

{

if(isset($_POST['newsletterSubscribe']))
{

    header('Content-Type: application/json');

    $db = new Connection(DB_HOST, DB_USER, DB_PASS, DB_NAME);

    $firstName = $_POST['firstName'];
    $email = $_POST['email'];

    if($email != '')
    {

        if(isDuplicateValue('subscribers', 'email', $email))
        {

            echo json_encode(array(
                'message' => 'You have already subscribed to this newsletter.',
                'redirect' => 'false'
            ));

        }
        else
        {

            $parameters = array(
                'table' => 'subscribers',
                    'fieldsAndValues' => array(
                    'firstName' => $firstName,
                    'email' => $email,
                    'addedDate' => datetime()
                    )
            );

            $db->insert($parameters);

            echo json_encode(array(
                'redirect' => 'true',
                'url' => BASE_URL.'subscribed'
            ));

        }

    }
    else
    {

        echo json_encode(array(
            'message' => 'You did not enter a valid email address.',
            'redirect' => 'false'
        ));

    }

}

}

问题是:

未捕获的TypeError:无法读取null的属性'redirect'

这些是我在检查员中获得的标题。

Request URL:http://www.thegurucoder.com/_php/ajax/newsletterSubscribe.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:17
Content-Type:application/x-www-form-urlencoded
Cookie:PHPSESSID=f3015d3c6fa08e53fc562477da0f563f
Host:www.thegurucoder.com
Origin:http://www.thegurucoder.com
Referer:http://www.thegurucoder.com/blog
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
X-Requested-With:XMLHttpRequest
Form Dataview URL encoded
firstName:
email:
Response Headersview source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:close
Content-Encoding:gzip
Content-Language:en-UK
Content-Length:20
Content-Type:text/html; charset=UTF-8
Date:Thu, 05 Jan 2012 15:21:54 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
Vary:Accept-Encoding
X-Powered-By:PHP/5.2.14

2 个答案:

答案 0 :(得分:1)

您的名字和电子邮件字段未设置。尝试删除jquery函数以获取ajax请求之外的那些值。目前,您将代码作为数据哈希的一部分传递。

var first_name = $('#newsletterSignup > #firstName').val();
var email = $('#newsletterSignup > #email').val();
 $.ajax({
        type: 'POST',
        url: ajaxURL,
        data: { firstName:first_name, email:email},
        dataType: 'json',
        ...
 });

var first_name = $('#newsletterSignup > #firstName').val(); var email = $('#newsletterSignup > #email').val(); $.ajax({ type: 'POST', url: ajaxURL, data: { firstName:first_name, email:email}, dataType: 'json', ... });

答案 1 :(得分:1)

您的代码的问题在于您没有在ajax请求中将'newsletterSubscribe'字段发布到您的php文件中,但是在那个php文件中,您正在检查'newsletterSubscribe',如果条件好像(isset($ _ POST ['newsletterSubscribe ']))。

所以在php代码中将if(isset($_POST['newsletterSubscribe']))更改为if(isset($_POST['firstName'])),这肯定会有效。