我的wordpress页面模板上有一个表单--
<form id="pollyform" method="post">
<textarea name="pollytext" id="text"></textarea>
<input type="submit" id="savetext" name="savetext" value="save-text" />
</form>
我正在尝试从我的textarea字段获取数据并发送到我的脚本--
$(document).ready(function() {
$(\'#savetext\').click(function(e){
// prevent the form from submitting normally
var txt = $("#text").val();
$.ajax ({
data: {
action: \'polly_pros\',
pollytext: txt
},
type: \'post\',
url: polpro.ajax_url,
success: function(data) {
console.log(data); //should print out the name since you sent it along
},
error: function() {
console.log("Error");
}
});
});
return false;
});
在我的函数文件中,我设置了脚本-
add_action( \'wp_enqueue_scripts\', \'ajax_test_enqueue_scripts\' );
function ajax_test_enqueue_scripts() {
wp_enqueue_script( \'pol\', get_stylesheet_directory_uri() . \'/pol.js\', array(), \'1.0.0\', true );
wp_localize_script( \'pol\', \'polpro\', array(
\'ajax_url\' => admin_url( \'admin-ajax.php\' )
));
}
但是,我的php函数不起作用--
add_action(\'wp_ajax_polly_pros\', \'polly_process\');
function polly_process() {
// use \\Aws\\Polly\\PollyClient; // this was moved to before get_header in my template page where my form is.
//require \'/aws-autoloader.php\'; // this was moved to before get_header in my template page where my form is.
$the_text = $_POST[\'pollytext\'];
if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) {
//echo $the_text;
$voice_id = "Joanna";
$text = $the_text;
$rate = "medium";
$is_download = false;
if(isset($_REQUEST[\'download\']) && $_REQUEST[\'download\']==1){
$is_download=true;
}
$config = array(
\'version\' => \'latest\',
\'region\' => \'us-east-1\',
\'credentials\' => [
\'key\' => \'keys\',
\'secret\' => \'keys\',
]
);
$client = new PollyClient($config);
$args = array(
\'OutputFormat\' => \'mp3\',
\'Text\' => "<speak><prosody rate=\'$rate\'>".str_replace("&","&",urldecode ($text))."</prosody></speak>",
\'TextType\' => \'ssml\',
\'VoiceId\' => $voice_id
);
$result = $client->synthesizeSpeech($args);
$resultData = $result->get(\'AudioStream\')->getContents();
$size = strlen($resultData); // File size
$length = $size; // Content length
$start = 0; // Start byte
$end = $size - 1; // End byte
if(!$is_download) {
file_put_contents(\'test.mp3\', $resultData);
} else {
file_put_contents(\'test.mp3\', $resultData);
}
}
die();
}
当我把php代码直接放在与模板相同的页面上时,它可以工作,但只是第一次,然后我无法更新文本和重新发送数据,等等。
如果我把函数代码改成这样---
function polly_process() {
$the_text = $_POST[\'pollytext\'];
if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) {
echo $the_text;
}
}
我可以看到它的工作和价值得到了回应。但我想使用的原始polly\\u流程代码在提交表单时出现了此错误--
jquery.js:8625 POST /admin-ajax.php 500 ()
send @ jquery.js:8625
ajax @ jquery.js:8161
(anonymous) @ pol.js:8
dispatch @ jquery.js:4430
r.handle @ jquery.js:4116
pol.js:20 Error
在检查控制台时,我可以看到jquery中突出显示了这一点。js公司---
// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );
我已检查调试。记录,未发现任何相关错误。那么我错过了什么呢?
EDIT
再次检查日志我看到了--
Uncaught Error: Class \'PollyClient\' not found
为什么我有这个代码--
use \\Aws\\Polly\\PollyClient;
require \'/aws-autoloader.php\';
在我的模板文件中,在我的头之前是因为它会导致网站崩溃。特别是-
use \\Aws\\Polly\\PollyClient;
当我在模板中直接使用它和polly\\u进程函数时,它就可以工作了,但它并不像我在ajax中需要的那个样是动态的。
那么,我将如何将该代码与ajax功能一起使用呢?