【发布时间】:2014-07-09 11:35:17
【问题描述】:
我正在尝试通过 AJAX 将表单数据发送到将在 wordpress 中创建新帖子的 php 脚本。我的代码似乎应该可以工作,但由于某种原因没有发生任何事情。
表格非常庞大,但我现在尝试使用的基本信息是:
<form action="/create-event" method="POST" enctype="multipart/form-data" class="event-form">
<input type="hidden" name="userID" id="userID" value="<?php echo get_current_user_id(); ?>" />
<fieldset>
<label for="event-name">Event Name</label>
<input type="text" id="event-name" name="event-name" value="" required />
</fieldset>
<input type="text" id="event-main-cat" name="event-main-cat" class="main-cat" required />
<input type="text" id="sub-cat" name="sub-cat" class="sub-category-input" value="" />
</form>
AJAX:
(function( $ ){
$( document ).ready(function() {
$('input[type=button]').on('click', function() {
if( $('.event-form').valid() ) {
var loadUrl = '/auto-save-post.php';
// ajax the results!
$.ajax({
type: "POST",
data: $('.event-form').serialize(),
url: templateDir + loadUrl, // templateDir is declared in the footer
success: function(result) {
console.log('data sent!');
console.log('sent to: ' + templateDir + loadUrl );
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR + " :: " + textStatus + " :: " + errorThrown);
}
});
}
});
});
})( jQuery );
PHP:
$data = $_POST['serialize'];
// set basic event info
$new_post = array(
'post_type' => 'event',
'post_author' => $data['userID'],
'post_title' => $data['event-name'],
'post_date' => Date('Y-m-d H:i:s'),
'post_status' => 'draft',
'tax_input' => array(
'main-cat' => $data['event-main-cat'],
'sub-cat' => $data['sub-cat']
)
);
// create the draft event
$post_id = wp_insert_post($new_post);
谁能看出我哪里出错了?
编辑 根据要求,网络选项卡中的信息:
标题:
Remote Address: 168.249.133.103:80
Request URL:http://website.co.uk/wp-content/themes/woa-2014/auto-save-post.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:1616
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:wp-settings-time-3=1401887703; wp-settings-time-5=1402046083; wp-settings-1=libraryContent%3Dbrowse%26urlbutton%3Dfile; wp-settings-time-1=1402995301; G_USERSTATE_H4=113882842213089035920=1; PHPSESSID=4e2b3d299649e1410fe8501b6a25e0b1; linkedin_oauth_77r7rxe672z4s8_crc=null; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_42509f9da25d0091a8295263478f1ff8=admin%7C1720385704%7Cd6b43843769a67a8e0746f7f784786d3; __atuvc=108%7C24%2C391%7C25%2C305%7C26%2C357%7C27%2C529%7C28
Host:website.co.uk
Origin:http://website.co.uk
Pragma:no-cache
Referer:http://website.co.uk/create-event/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Data
userID:1
event-name:test event name
address-1:The Custard Factory
postcode:B9 4AA
address-2:
city:Birmingham
region:West Midlands
country:UK
lat:52.475514
long:-1.8842237999999725
phone:0121 285 5124
phone-alt:
email:info@b9media.co.uk
website:
event-main-cat:2
sub-cat:
suitable-for-ages:18-30
Response Headersview source
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:183
Content-Type:text/html
Date:Wed, 09 Jul 2014 11:58:24 GMT
Keep-Alive:timeout=5, max=1000
Server:Apache
Vary:Accept-Encoding,User-Agent
回应
`Fatal error: Call to undefined function wp_insert_post() in /home/lukeseag/public_html/codeplayground/woa/wp-content/themes/woa-2014/auto-save-post.php on line 30`
【问题讨论】:
-
$_POST['serialize']是干什么用的?而且我在这里也没有看到任何类型的身份验证 - 发布数据的公共 api 似乎是个坏主意 -
你能添加你的 ajax 连接的 Inspector 日志吗?为此,在 FF 安装和打开 Firebug 中打开 WebKit 的 Inspector(Chrome/Safari/任何其他 Web 工具包浏览器),然后打开网络选项卡然后发送您的请求,您应该会看到对
/auto-save-post.php的调用打开并将有关请求的所有内容复制到代码视图中,这将帮助我们查看您的代码哪里出错了 -
我认为您的
url--->templateDir在此 iife 范围内不可用。 -
嗨@Martin Barker,刚刚检查了这个,在回复中我收到
Fatal error: Call to undefined function wp_insert_post() in /home/lukeseag/public_html/codeplayground/woa/wp-content/themes/woa-2014/auto-save-post.php on line 27我猜这就是问题所在? -
是的,对不起,我没有回复你,但你得到了答案,很高兴我能帮助你得到答案,虽然向你展示了如何在发出 XHR 请求时从服务器端获取调试/错误