0

我可以得到以下字符串

([{"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 . ');';
?>

我不确定为什么 URL 如下请求 URL: http://mydomain.com/check.php?callback=jsoncallback&nameB=tutorB&roleB=Tutor&get123=1&accept=0&_= 1363710513593

最后一个参数&_=1363710513593我不确定是什么?

但它可以返回上面的字符串

它与jquery版本有关吗?我用 jquery-1.9.1.min.js

4

3 回答 3

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" }

于 2013-03-19T15:17:52.343 回答
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 在客户端上的处理方式(即响应以文本形式出现并嵌入正文中)

您正在访问的 json 服务支持 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;
        });
于 2013-03-19T15:15:00.397 回答
1

看起来您的服务器正在尝试 reutnr jsonp。尝试添加

dataType: 'jsonp'

到您的 ajax 请求并删除 jsoncallback=? 参数

例如

 $.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;
        });
于 2013-03-19T15:15:40.763 回答