通过AJAX请求PHP脚本。 AJAX请求返回实际的PHP脚本

从php脚本请求JSON:</ p>

  var channelList; \  n 
$(document).ready(function(){
$ .ajax({
url:'channellookup.php',
dataType:'json',
error:function(){console.log (参数)},
success:function(data){
console.log(data.success);
channelList = data;
}
});
});
</ code> </ pre>

现在到了有趣的部分:控制台中的错误消息如下所示:</ p>

 参数{0:XMLHttpRequest,1:“  parsererror“,2:”无效的JSON:&lt;?php 
header('Content-type:application / json'); //确保输出json类型。
类MyDB扩展SQLite3
{
</ code > </ pre>

等等。我的整个PHP代码都在那条消息中。</ strong>这里的某些内容必须完全错误。</ p>

这是我的PHP完整</ p>

 &lt;?php 

header('Content-type:application / json'); //确保ou tput json类型。
类MyDB扩展了SQLite3

{
函数__construct()

{
$ this-&gt; open('database_sqlite3.db');

}
}

$ db = new MyDB();

if if(!$ db){
echo $ db-&gt; lastErrorMsg();

} else {
echo“已成功打开数据库
”;

}

$ sql =&lt;&lt;&lt; EOF

SELECT * from channels;

EOF;

$ ret = $ db-&gt; query($ sql); \ n
$ channelList = array();

while($ row = $ ret-&gt; fetchArray(SQLITE3_ASSOC)){
$ channelList [] = $ row;

}
echo json_encode($ channelList);
$ db-&gt; close();
?&gt;
</ code> </ pre>

你可以看到我 编码为json。 正如我所说,这在终端中有效。
请记住,我不想在我的html中使用json,所以在异步请求完成之前生成的页面还不是问题。 </ p>

问题可能是我在远程服务器上但在本地文件上没有这样做吗? 据我所知,浏览器应该能够处理这种情况。</ p>
</ div>

展开原文

原文

Requesting JSON from php script :

var channelList;

$(document).ready(function() {
    $.ajax({    
        url: 'channellookup.php',    
        dataType: 'json',    
        error: function(){console.log(arguments)},     
        success: function(data) {
            console.log(data.success);
            channelList = data;
        }  
    });
});

Now to the interesting part: The error message in the console reads like this:

Arguments { 0: XMLHttpRequest, 1: "parsererror", 2: "Invalid JSON: <?php
   header('Content-type: application/json');     // To ensure output json type.
   class MyDB extends SQLite3
   {

And so on. My whole PHP code is in that message. Something must go completely wrong here.

Here is my PHP in full

<?php

   header('Content-type: application/json');     // To ensure output json type.
   class MyDB extends SQLite3

   {
      function __construct()

      {
         $this->open('database_sqlite3.db');    
      }
   }

   $db = new MyDB();

   if(!$db){    
      echo $db->lastErrorMsg();    
   } else {    
      echo "Opened database successfully
";    
   }

   $sql =<<<EOF

      SELECT * from channels;

EOF;

   $ret = $db->query($sql);

   $channelList = array();

   while($row = $ret->fetchArray(SQLITE3_ASSOC) ){    
      $channelList[] = $row;    
   }
   echo json_encode($channelList);
   $db->close();
?>

as you can see I do encode as json. As I said this works in the terminal. Please keep in mind that I do not want to use the json in my html yet so the page generating before the asynchronous request is completed isn't an issue yet.

Is the problem maybe that I am not doing this on a remote server but on local files? As I understand the Browser should be able to handle this case.

dounao5856
dounao5856 它在我的本地机器上。我也有一台服务器正在运行,但也许它配置错误,我会检查
5 年多之前 回复
doujing3896
doujing3896 如果你直接在网络浏览器中访问channellookup.php,你会得到什么?
5 年多之前 回复
dqrnsg6439
dqrnsg6439 你确定你的php文件是在可以运行php的服务器上吗?
5 年多之前 回复
duannengling4705
duannengling4705 结果仍然是一样的
5 年多之前 回复
doulin2555
doulin2555 删除标题('Content-type:application/json');从您的PHP文件,然后再次检查
5 年多之前 回复

2个回答



我很确定你的PHP根本没有编译。 这是因为返回的结果实际上是你的php文件的 body </ code>,表明没有发生翻译。</ p>

你可以查看你的PHP 实例正在运行,创建一个包含以下代码的文件:</ p>

 &lt;?php phpinfo()?&gt; 
</ code> </ pre>

< p>并使用您的浏览器导航到该页面,看看是否有任何输出。 你想检查你的PHP / Apache安装,直到输出正确。</ p>

至于为什么你的webtool工作,我不能幻想任何理由。 它应该以同样的方式失败。</ p>
</ div>

展开原文

原文

I'm quite sure that your PHP didn't compile at all. This is because the result that was returned, is in fact the body of your php file, indicating that no translation took place.

You can check if your PHP instance is running by creating a file with the code:

<?php phpinfo() ?>

And use your browser to navigate to that page and see if there are any output. You want to check your PHP/Apache installation until the output is correct.

As to why your webtool work, I cannot phantom any reason. It should fail in the same way.

doushi1847
doushi1847 真棒! 最受欢迎的。
5 年多之前 回复
doufan6886
doufan6886 是的,我确实运行了apache,但也许我配置错了。 我重新安装了服务器,现在它可以正常工作。 谢谢!
5 年多之前 回复
doulianxi0587
doulianxi0587 另外,按照@Joerg的描述进行更改。
5 年多之前 回复
dongzhouhao4316
dongzhouhao4316 你错误地认为只是因为你在shell中有$ php,意味着你的服务器绑定到该模块,因此将解析它。 当你执行$ php channellookup.php时,你正在解析代码。 因此它运行并返回您的数据。 但是,当您从浏览器发出Web请求时,它需要转到服务器,如Apache,然后决定是否需要解析您请求的文件(通常是文件扩展名,在本例中为*。* php) ,然后解析它。 否则,您的浏览器请求永远不能访问shell $ php模块。
5 年多之前 回复
drl959975
drl959975 好吧,我只是检查了终端$ php channellookup.php生成的字符串,它是有效的。 我想我的网络服务器不能满足请求。 据我所知,浏览器能够处理xmlhttprequests,但当然不是PHP本身。 我会检查我的服务器配置。 服务器是我正在开发的同一台机器。
5 年多之前 回复



发送标题后,您将回显数据库中的连接状态。</ p>

删除 这一行:</ p>

  if(!$ db){
echo $ db-&gt; lastErrorMsg();

} else {
echo“已成功打开数据库
”;

<
</ code> </ pre>

并将标头放在JSON输出上方:</ p>

  header('Content-type: 应用/ JSON');

echo json_encode($ channelList);
$ db-&gt; close();
</ code> </ pre>
</ div>

展开原文

原文

After you send the header, you are echoing the connection status from the db.

Remove this lines:

    if(!$db){    
      echo $db->lastErrorMsg();    
   } else {    
      echo "Opened database successfully
";    
   }

And put the header above the JSON output:

header('Content-type: application/json');   
echo json_encode($channelList);
$db->close();

doucepei5298
doucepei5298 你是对的。 这段代码来自一个教程,回声后也有一条成功的消息。 我编辑了但忘了编辑你提到的部分
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐