使用jsonp工作的Ajax请求到localhost php

时间:2012-12-20 08:36:30

标签: jquery mysql ajax jsonp

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

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

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

我已阅读有关跨域请求的信息,并知道如果我使用JSONp,这不应该是一个问题。

非常感谢任何帮助。

我的HTML中用于调用ajax函数的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>

实际的getData.php代码如下:

<?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) . ');';
?>

1 个答案:

答案 0 :(得分:4)

我发现了三个问题:

  1. 您的PHP脚本正在查找名为jsoncallback的GET参数,但这不是jQuery默认发送的名称,即callback。要么改变PHP以使用callback代替:

    // Here ----v
    echo $_GET['callback'] . '(' . json_encode($records) . ');';
    

    ...或者在ajax调用中添加此选项,告诉jQuery使用jsoncallback代替:

    jsonp: "jsoncallback",
    

    您可以使用浏览器开发工具中的“网络”标签检查呼叫并查看查询字符串的外观,以确保它们匹配。

  2. 您的ajax选项中有拼写错误,您有datatype:'jsonp'而不是dataType:'jsonp'T中的dataType必须为大写),所以jQuery根本不会尝试进行JSON-P调用,它会尝试XHR。

  3. 您在问题中已经说过PHP页面位于http://localhost:8080/getData.php,但您给jQuery的urlhttp://localhost/getData.php(没有端口)。< / p>