Jquery 使用jsonp对本地主机php的Ajax请求不起作用

Jquery 使用jsonp对本地主机php的Ajax请求不起作用,jquery,mysql,ajax,jsonp,Jquery,Mysql,Ajax,Jsonp,您好,我正在使用Jquery调用php脚本。php脚本位于http://localhost:8080/getData.php并访问MySql数据库 我在我的pc上使用tomcat服务器设置,服务器地址为localhost:8080 我已经查看了ajax响应data.status,它是0 我已经阅读了有关跨域请求的内容,并且知道如果我使用JSONp,这应该不会是一个问题 任何帮助都将不胜感激 我用来调用ajax函数的HTML中的jquery部分如下: <script type="text/j

您好,我正在使用Jquery调用php脚本。php脚本位于
http://localhost:8080/getData.php
并访问MySql数据库

我在我的pc上使用tomcat服务器设置,服务器地址为localhost:8080

我已经查看了ajax响应data.status,它是0

我已经阅读了有关跨域请求的内容,并且知道如果我使用JSONp,这应该不会是一个问题

任何帮助都将不胜感激

我用来调用ajax函数的HTML中的jquery部分如下:

<script type="text/javascript">
$(document).ready(function() {
   $.ajax({
       type:'GET',
       url:'http://localhost/getData.php',
       datatype:'jsonp',
       timeout: 5000,
       success: function(data){
           //data loaded
           alert('loaded');

       },
       error: function(data){
           // error on loading data
           alert('error');        
       }
    });
});
</script>
<?php
header('Content-type: application/json');

$server = "127.0.0.1";
$username = "root";
$password = "";
$database = "deals";

$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

$sql = "SELECT area_id, name AS area_name, sector AS area_sector FROM deals.areas ORDER BY name";
$result = mysql_query($sql) or die ("Query error: " . mysql_error());

$records = array();

while($row = mysql_fetch_assoc($result)) {
    $records[] = $row;
}

mysql_close($con);

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
?>

$(文档).ready(函数(){
$.ajax({
类型:'GET',
网址:'http://localhost/getData.php',
数据类型:'jsonp',
超时:5000,
成功:功能(数据){
//数据加载
警报(“已加载”);
},
错误:函数(数据){
//加载数据时出错
警报(“错误”);
}
});
});
实际的getData.php代码如下:

<script type="text/javascript">
$(document).ready(function() {
   $.ajax({
       type:'GET',
       url:'http://localhost/getData.php',
       datatype:'jsonp',
       timeout: 5000,
       success: function(data){
           //data loaded
           alert('loaded');

       },
       error: function(data){
           // error on loading data
           alert('error');        
       }
    });
});
</script>
<?php
header('Content-type: application/json');

$server = "127.0.0.1";
$username = "root";
$password = "";
$database = "deals";

$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

$sql = "SELECT area_id, name AS area_name, sector AS area_sector FROM deals.areas ORDER BY name";
$result = mysql_query($sql) or die ("Query error: " . mysql_error());

$records = array();

while($row = mysql_fetch_assoc($result)) {
    $records[] = $row;
}

mysql_close($con);

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');';
?>

我看到了三个问题:

  • PHP脚本正在寻找一个名为
    jsoncallback
    的GET参数,但这不是jQuery默认发送的名称,即
    callback
    。将PHP更改为使用
    回调

    // Here ----v
    echo $_GET['callback'] . '(' . json_encode($records) . ');';
    
    jsonp: "jsoncallback",
    
    …或将此选项添加到调用中,以告知jQuery改用
    jsoncallback

    // Here ----v
    echo $_GET['callback'] . '(' . json_encode($records) . ');';
    
    jsonp: "jsoncallback",
    
    您可以使用浏览器开发工具中的“网络”选项卡来检查调用,并查看查询字符串的外观,以确保它们匹配

  • 您的ajax选项中有一个输入错误,
    datatype:'jsonp'
    而不是
    datatype:'jsonp'
    datatype
    中的
    T
    必须是大写),因此jQuery根本不会尝试执行JSON-p调用,它将尝试使用XHR

  • 您在问题中说过PHP页面位于
    http://localhost:8080/getData.php
    ,但是您给jQuery的
    url
    http://localhost/getData.php
    (不带端口)


  • 我看到三个问题:

  • PHP脚本正在寻找一个名为
    jsoncallback
    的GET参数,但这不是jQuery默认发送的名称,即
    callback
    。将PHP更改为使用
    回调

    // Here ----v
    echo $_GET['callback'] . '(' . json_encode($records) . ');';
    
    jsonp: "jsoncallback",
    
    …或将此选项添加到调用中,以告知jQuery改用
    jsoncallback

    // Here ----v
    echo $_GET['callback'] . '(' . json_encode($records) . ');';
    
    jsonp: "jsoncallback",
    
    您可以使用浏览器开发工具中的“网络”选项卡来检查调用,并查看查询字符串的外观,以确保它们匹配

  • 您的ajax选项中有一个输入错误,
    datatype:'jsonp'
    而不是
    datatype:'jsonp'
    datatype
    中的
    T
    必须是大写),因此jQuery根本不会尝试执行JSON-p调用,它将尝试使用XHR

  • 您在问题中说过PHP页面位于
    http://localhost:8080/getData.php
    ,但是您给jQuery的
    url
    http://localhost/getData.php
    (不带端口)


  • 嗨,T.J.克劳德,今天晚些时候我回家后,我会试着试一试。我是个新手,你有没有做过类似的事情?如果有,您知道web上有任何链接/教程吗?非常感谢您的回复。@user1907509:我不知道有什么具体的链接/教程,但web上并不缺少jQuery/JSON-P示例。:-)我注意到您的呼叫中还有一些其他问题,并更新了答案,希望能有所帮助。T.J Crowder我已经尝试过,并且能够从php获得响应,但响应只是php的实际源代码,而不是预期的JSON数据。也许我在php方面做错了什么。php脚本看起来正确吗?@user1907509:听起来您的web服务器上的php配置不正确。@user1907509:太好了!很高兴这有帮助。最好的,嗨,T.J.克劳德,我今天晚些时候回家的时候会试着试一试。我是个新手,你有没有做过类似的事情?如果有,您知道web上有任何链接/教程吗?非常感谢您的回复。@user1907509:我不知道有什么具体的链接/教程,但web上并不缺少jQuery/JSON-P示例。:-)我注意到您的呼叫中还有一些其他问题,并更新了答案,希望能有所帮助。T.J Crowder我已经尝试过,并且能够从php获得响应,但响应只是php的实际源代码,而不是预期的JSON数据。也许我在php方面做错了什么。php脚本看起来正确吗?@user1907509:听起来您的web服务器上的php配置不正确。@user1907509:太好了!很高兴这有帮助。最好的,