DataType JSON不能与php一起使用

时间:2013-05-12 19:46:17

标签: php javascript ajax json encoding

这是我的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(请不要说我连接到DB的方式,它现在还没有完成)

<?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;
    }
}

当我将dataType更改为&#34; text&#34;在javasript函数中 - 我收到了一个警告&#39; undifiend&#39;

但是,当它变成“json”时,我什么也得不到(chrome debuger什么也看不见)

我为这篇文章http://kunststube.net/frontback/设置了所有编码 我用简单的POST请求检查了它 - 它完美无缺。

json的问题。

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:0)

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

即可

之后尝试print_r(json_decode($_POST['string']));。我很确定能为您提供数据。

确实删除了beforeSend回调。

答案 1 :(得分:0)

我认为问题是代码var postData ="string="+string; jQuery希望这是一个合适的JSON对象。

下一步:$string = $_POST['www'];从您的帖子请求中获取名为“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...];