使用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
答案 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']))
,这肯定会有效。