0

这是我的 HTML

 <input x-webkit-speech id="mike" name="string" style="position: relative;" disabled lang="ru" />

然后当场发生变化时,

这个函数执行

$(document).ready(function(){

    $('#mike').bind('webkitspeechchange',function()
    {

        a= $(this).val();
        recognizeAjax(a);

})  ;
});


function recognizeAjax(string) {

    var postData ="string="+string;

    $.ajax({
        type: "POST",
        dataType: "json",
        data: postData,
        beforeSend: function(x) {
            if(x && x.overrideMimeType) {
                x.overrideMimeType("application/json;charset=UTF-8");
            }
        },
        url: 'restURL.php',
        success: function(data) {
            // 'data' is a JSON object which we can access directly.
            // Evaluate the data.success member and do something appropriate...
            if (data.success == true){

                alert(data.message);
            }
            else{
                alert(data.message+'hy');
            }
        }
    });

这是我的PHP(请不要说我连接到数据库的方式,它现在不合适)

<?php header('Content-type: application/json; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', true);
// Here's the argument from the client.
$string = $_POST['www'];
$quest=1;


$con=mysql_connect("localhost", "******", "*********") or die(mysql_error());
mysql_select_db("vocabulary", $con) or die(mysql_error());
mysql_set_charset('utf8', $con);


$sql="SELECT * FROM `text` WHERE event_name = 'taxi' AND quest_id = '".$quest."'";

$result = mysql_query($sql);

mysql_close($con);
while($row = mysql_fetch_array($result))

{


    if ($string == htmlspecialchars($row['phrase']))
    {

 $data = array('success'=> true,'message'=>$row['phrase']);

// JSON encode and send back to the server
        header("Content-Type: application/json", true);
echo json_encode($data);
        exit;
        break;
    } else {
// Set up associative array
         $data = array('success'=> false,'message'=>'aint no sunshine');
        header("Content-Type: application/json", true);
         echo json_encode($data);
        exit;
        break;
    }
}

当我在 javasript 函数中将 dataType 更改为“text”时 - 我收到带有“undifiend”的警报

但是当它变成'json'时..我什么也没收到(chrome调试器什么也没看到)

我为这篇文章设置了所有编码http://kunststube.net/frontback/ 我用简单的 POST 请求检查了它——它工作得很好。

json的问题。

有什么建议么?

谢谢

4

2 回答 2

0

只需删除该datatype="json"位并将数据位更改为data: { "string": string }

之后尝试print_r(json_decode($_POST['string']));. 我很确定这会让你得到你的数据。

确实删除了您的beforeSend回调。

于 2013-05-12T20:22:30.743 回答
0

我认为问题在于var postData ="string="+string; jQuery 期望这是一个正确的 JSON 对象的代码。

Next:$string = $_POST['www'];从您的 post 请求中获取一个名为“www”的参数,但上面的名称是“string”(至少)。

试试(!)这个:

var getData ="www="+string;

    $.ajax({
        type: "POST",
        dataType: "json",
        data: null,
        beforeSend: function(x) {
            if(x && x.overrideMimeType) {
                x.overrideMimeType("application/json;charset=UTF-8");
            }
        },
        url: 'restURL.php?' + getData,

和服务器:

$string = $_GET['www'];

或者这个(php)

$string = $_POST['string'];
$stringData = json_decode($string);

// catch any errors ....

$quest=$stringData[....whatever index that is...];
于 2013-05-13T00:16:15.050 回答