2014-02-10 118 views
0

我不明白为什么以下不工作,我想调用一个PHP脚本来发送电子邮件,但我不认为我的ajax调用是根本调用PHP脚本,我只是返回一个错误。AJAX后调用PHP脚本不工作

我的Ajax调用:

 var name_field = $('#cf_name').val(); 
     $.ajax({ 
      type: 'post', 
      url: 'contact.php', 
      data: {'name_field' : name_field }, 
      dataType: 'json', 
      success: function(data) { 
       if(data.status == 'success') 
        alert("Thank you for subscribing!"); 
       else if(data.status == 'error') 
        alert("Error on query!"); 
      }, 
      error: function(err) { 
       alert(err.responseText); 
      } 
     }); 

我的PHP脚本:

$field_name = isset($_POST['name_field']); 
$field_email = '[email protected]'; 
$field_phone = '12345'; 
$field_message = 'Hello World!'; 

$mail_to = '[email protected]'; 
$subject = 'Message from a website visitor '.$field_name; 

$body_message = 'This message has been sent via website:'."\n\n"; 
$body_message .= 'From: '.$field_name."\n\n"; 
$body_message .= 'E-mail: '.$field_email."\n\n"; 
$body_message .= 'Phone Number: '.$field_phone."\n\n"; 
$body_message .= 'Message: '.$field_message; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { 
    $response_array['status'] = 'success'; 
} 
else { 
    $response_array['status'] = 'error'; 
} 
header('Content-type: application/json'); 
echo json_encode($response_array); 

如果我浏览到的URL直接在PHP按预期工作,但我不能让AJAX后调用它。

+0

当你尝试ajax会发生什么?你有没有去过阿贾克斯线?你到达成功的功能吗?你是否有错误功能? –

+0

使用devtools查看网络选项卡(firebug/fox/chrome)中ajax请求的状态,并查看是否帮助或粘贴结果到您的问题中,同时尝试使用绝对URL,如果您获得了404网址是不正确的。 – Allende

+0

我绝对打到ajax调用的错误响应。尽管err.responseText为空。 – LolBB

回答

0

看到这个:jQuery Ajax post cancelled我不是一个js专家,但我同意你的问题是你的ajax调用的异步执行,因为它需要一段时间来发送电子邮件,也许没有及时完成你的js

看到这个漂亮的解释关于Ajax调用的 “异步” propertie:

What does "async: false" do in jQuery.ajax()?

而且看到这个提问/回答:

How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

+0

感谢您的帮助! – LolBB

+0

不客气! – Allende

1

$ field_name不是一个实际的字符串,它是一个布尔值,因为您使用了$ field_name = isset($ _ POST [name_field'])。删除isset()。

+0

谢谢,这不是问题,但肯定是一个问题,谢谢。 – LolBB

+0

唉,我试了你的代码在我的服务器上,它工作正常。我没有收到任何错误。 http://shadeoftruth.com/看看。 –

0

您应该检查url: contact.php,因为您没有指定完整的URL,所以您的帖子将转到相对路径。根路径将是相同的当前脚本路径。