我可以得到以下字符串
([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB":"tutorB","Give":"0","Get":"1","Accept":"0"}}]);
我从http://api.jquery.com/jQuery.ajax/读过,但仍不确定我在哪里做错了。
这是我的代码
$.ajax({
type: 'GET',
dataType: 'jsonp',
jsonpCallback: 'jsoncallback',
data:
{
nameB: nameB,
roleB: roleB,
get123: get123,
accept: accept
},
url: 'http://mydomain.com/check.php?callback=?',
success: function(data){
alert(data[0].data.RoleA);
//alert("ABC");
//if ( $("#role").text() == "Tutor" )
//{
// window.location.href='tutor_home.html';
//}
//else
//{
// window.location.href='student_home.html';
//}
},
error: function(jqXHR, textStatus){
alert("Request failed: " + textStatus);
}
});
从chrome,我可以找到json字符串,看起来很正常。但是,它不会提示成功消息,而是警告parsererror错误..我应该在哪里更改?感谢
我的php
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Content-type: application/json");
include('mysqlConfig.php');
$nameB = $_GET["nameB"];
$roleB = $_GET["roleB"];
$get = $_GET["get123"];
$accept = $_GET["accept"];
$sql="SELECT * FROM tbl_rating WHERE NameB='$nameB' and RoleB='$roleB' and Get='$get' and Accept='$accept'";
$result=mysql_query($sql);
$rows = array();
//retrieve and print every record
while($r = mysql_fetch_assoc($result)){
// $rows[] = $r; has the same effect, without the superfluous data attribute
$rows[] = array('data' => $r);
}
// now all the rows have been fetched, it can be encoded
//echo json_encode($rows);
$data = json_encode($rows);
echo $_GET['jsoncallback'] . '(' . $data . ');';
?>
我不确定为什么网址如下 请求网址: http://mydomain.com/check.php?callback=jsoncallback&nameB=tutorB&roleB=Tutor&get123=1&accept=0&_=1363710513593
最后一个参数&_=1363710513593
我不确定它是什么?
但它可以返回上面的字符串
它与jquery版本有关吗?我使用了jquery-1.9.1.min.js
答案 0 :(得分:3)
您需要在ajax设置对象中指定一个回调名称(现在称为“?”)。在http://api.jquery.com/jQuery.ajax/上详细了解其工作原理。在设置对象中查找“jsonp”。您还需要在PHP代码中获取该回调名称并将其返回到响应中,以便在将该函数接收到客户端时执行该函数。 示例:jsoncallback(YOURJSONDATA)。
从http://api.jquery.com/jQuery.ajax/
粘贴JSONP 类型:字符串 覆盖jsonp请求中的回调函数名称。在'callback =?'中将使用此值代替'callback' url中查询字符串的一部分。所以{jsonp:'onJSONPLoad'}会导致'onJSONPLoad =?'传递给服务器。从jQuery 1.5开始,将jsonp选项设置为false可防止jQuery将“?callback”字符串添加到URL或尝试使用“=?”转型。在这种情况下,您还应该显式设置jsonpCallback设置。例如,{jsonp:false,jsonpCallback:“callbackName”}
答案 1 :(得分:1)
更新:您显示您的服务未返回正确的jsonp有效负载
修复它以使用传递的回调名称,因此当您将mycallback
作为jsonp回调传递时,您将获得以下响应。
mycallback([{"data":{"Rate":"","RoleA":"Student","NameA":"student","RoleB":"Tutor","NameB":"tutorB","Give":"0","Get":"1","Accept":"0"}}]);
更新2:&_=1363710513593
- 是为了让jquery能够弄清楚对应的jsonp请求是什么而添加到请求中的时间戳,因为jsonp在客户端上的处理方式(即响应来自文本并且是嵌入体内)
$.ajax
执行jsonp请求并将json回调名称更改为jsoncallback
http://api.jquery.com/jQuery.ajax/
$.ajax({
type: 'GET',
dataType : 'jsonp',
jsonpCallback : 'jsoncallback',
data:
{
nameB: nameB,
roleB: roleB,
get123: get123,
accept: accept
},
url: 'http://mydomain.com/check.php',
success: function(data){
alert(data[0].data.RoleA);
}
},
error: function(){
alert('There was an error.');
}
});
//return false;
});
答案 2 :(得分:1)
看起来您的服务器正在尝试返回jsonp。尝试添加
dataType: 'jsonp'
到你的ajax请求并删除jsonp callback =?参数
e.g。
$.ajax({
type: 'GET',
dataType: 'jsonp',
data:
{
//nameB: nameB,
//roleB: roleB,
//get123: get123,
//accept: accept
},
url: 'http://mydomain.com/check.php?nameB=tutorB&roleB=Tutor&get123=1&accept=0&',
success: function(data){
alert(data[0].data.RoleA);
},
error: function(){
alert('There was an error.');
}
});
//return false;
});