Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未从ajax函数调用PHP脚本_Javascript_Php_Ajax_Knockout.js - Fatal编程技术网

Javascript 未从ajax函数调用PHP脚本

Javascript 未从ajax函数调用PHP脚本,javascript,php,ajax,knockout.js,Javascript,Php,Ajax,Knockout.js,这是一个很难回答的问题 我的javascript函数(我定义的knockout.js模型的一部分): 数据库_connection.php的内容: <?php echo "this is called"; $db = new MySqli('localhost', 'username', 'password', 'database'); $activities = $db->query("SELECT * FROM MainActivity"); $a

这是一个很难回答的问题

我的javascript函数(我定义的knockout.js模型的一部分):

数据库_connection.php的内容:

<?php
    echo "this is called";
    $db = new MySqli('localhost', 'username', 'password', 'database');
    $activities = $db->query("SELECT * FROM MainActivity");
    $activities_r = array();

    while($row = $activities->fetch_array()){
        $val = $row['mActivityID'];
        $act = $row['Name'];

        $activities_r[] = array('val'=>$val, 'act' => $act);
        }

        echo json_encode($activities_r);

?>

php是正确的,因为如果我通过浏览器直接访问这个文件,它会正确地显示数据库表中的结果

但是,当通过
loadData
功能执行时,我会收到两个警报: 1. <代码>“调用loadData” 2. <代码>“服务器调用错误”

没有执行database_connection.php的第一行,因为我看不到echo的结果,所以这意味着没有调用脚本


我是否错误地使用了
ajax
函数?

您需要在php文件中添加标题,因为在ajax调用中您的数据类型是json

header('Content-Type: application/json');
echo json_encode($activities_r);

您的AJAX请求包含:

dataType: "json"
这意味着,如果服务器返回状态为200OK的无效JSON,那么jQuery将触发错误函数

使用以下代码确保响应为JSON格式。。(PHP vVersion)


注意:空响应也被视为无效JSON;您可以返回{}或null,将其验证为JSON

您需要设置请求的
类型
,并且可以删除
数据类型
。同样在
success
回调中,它是一个额外的括号。检查它:

self.loadData = function(){
    alert("loadData got called");
    $.ajax({
        url: 'database_connection.php',
        type : 'GET',
        // dataType: 'json',
        sucess: function(data){     //json string of records returned from server
            alert('success from server call');              

        },
        error: function(){
            alert('error from server call');            
        }

    });
};

您使用ajax函数的方式看起来不错。你确定
database\u connection.php
可以作为调用loadData函数的相对部分那样调用吗?@DanBelden我不确定这是否有助于OP回答他的问题。你检查网络调用了吗?你在ajax调用中缺少
类型
。尝试澄清它是获取哪种类型的请求,POST&a输入错误
success
回调哪个应该是
success
。尝试了这个。我仍然在loadData函数中得到错误调用。然而,现在当我直接从浏览器打开php文件时,我得到了以下错误:
警告:无法修改标题信息-标题已由发送(输出开始于/path/to/file/database\u connection.php:2)
。删除php文件中所有“echo”或“header”之前的打印我很高兴听到您尝试了这一点。我仍然在loadData函数中得到错误调用。但是,现在当我直接从浏览器打开php文件时,会出现以下错误:
警告:无法修改标题信息-标题已由发送(输出开始于/path/to/file/database_connection.php:2)
尝试了此操作。好消息是我从服务器调用中获得了
成功
。不幸的是,我现在遇到两个问题:1。这进入无限循环。只要我按下
ok
按钮查看
success
消息,它就会再次弹出。必须强制退出浏览器才能结束此无限循环。2.此页获取的数据为空。[我试图访问的表中只有两行。]
header('Content-Type: application/json');
self.loadData = function(){
    alert("loadData got called");
    $.ajax({
        url: 'database_connection.php',
        type : 'GET',
        // dataType: 'json',
        sucess: function(data){     //json string of records returned from server
            alert('success from server call');              

        },
        error: function(){
            alert('error from server call');            
        }

    });
};