2013-05-12 35 views
0

在这里工作是我的HTML数据类型JSON没有用PHP

<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功能“文字” - 我收到一个警报“undifiend”

但当chenge为“JSON” ..我什么也得不到(铬debuger什么也看不到)

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

json的问题。

有什么建议吗?

感谢

+0

是否'VAR POSTDATA =(!){字符串:字符串}; '修理它?你的字符串可能有特殊字符,并且你没有正确编码。 – Barmar 2013-05-12 20:09:38

+0

另外,我不认为PHP理解JSON格式提交的表单,所以你应该删除'overrideMimeType'的东西。 – Barmar 2013-05-12 20:12:35

+0

它明白http://www.islandsmooth.com/2010/04/send-and-receive-json-data-using-ajax-jquery-and-php/ – 2013-05-12 20:23:29

回答

0

只需卸下datatype="json"位和更改数据位data: { "string": string }

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

确实删除您的beforeSend回调。

+0

没有必要删除'dataType:“json”'。这是多余的,因为PHP设置了Content-Type,但没有任何伤害。 – Barmar 2013-05-12 20:29:33

+0

冗余代码应该总是被删除:)我明白他想要做什么。这是一个REST服务,所以他试图发布原始json而不将其包装到JavaScript框架通常所做的形式urlencoded数据中。然后用'file_get_contents(“php:// input”);'在PHP/REST端读取。更容易在PHP端做出例外,然后在javascript端进行更改:) – 2013-05-12 20:33:20

+0

@DamienOvereem print_r(json_decode($ _ POST ['string']));对我来说并不好,因为我需要返回多个参数, 数组最后会是这样的: $ data = array('success'=> true,'message'=> $ row ['phrase'],'timeb'=>'13.04','timee'=>'12.03','animation'=>'go_left'); – 2013-05-12 20:42:40

0

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

Next:$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...];