ajax form function error

时间:2018-05-09 作者:730wavy

我的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("&","&amp;",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功能一起使用呢?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

此错误告诉您,AJAX回调的PHP中有500个错误:

jquery.js:8625 POST /admin-ajax.php 500 ()
这可能是由语法错误或其他编码错误引起的。

查看代码时,一个明显的主要问题是:

// 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.
这里:

$client = new PollyClient($config);
要使第二段代码正常工作,需要加载包含PollyClient 班代码的第一位告诉我它没有被加载。这是因为你把requireuse 在模板中,但该模板不会加载到AJAX请求中。您需要从主题的函数文件或AJAX回调函数中获取该文件。不这样做会导致500个错误,可以解释您的问题。如果查看错误日志,您可能会看到有关该类的一些信息PollyClient 不存在。

代码中可能还有其他问题,我不确定,我只是看到了这个问题并注意到了这个问题。但本质上,问题是您的polly_process() 作用

SO网友:Benoti

你的问题都没读,我直接停下来

var txt = $("#pollytext").val();
那一定是

var txt = $("#text").val();

结束