Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
AJAX不读取PHP-JSON-echo_Php_Jquery_Ajax_Json - Fatal编程技术网

AJAX不读取PHP-JSON-echo

AJAX不读取PHP-JSON-echo,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我有一个简单的jQueryAjax请求,它将用户输入从文本框提交到PHP文件。下面是它的代码: $.ajax({ url: url, type: type, data: data, dataType: 'json', success: function(response){ console.log(response); } }); PHP文件基本上会让用户登录。在我将数据类型:“json”添加到AJAX请求之前,一切都很顺利。现在

我有一个简单的jQueryAjax请求,它将用户输入从文本框提交到PHP文件。下面是它的代码:

$.ajax({
    url: url,
    type: type,
    data: data,
    dataType: 'json',
    success: function(response){
        console.log(response);
    }
});
PHP文件基本上会让用户登录。在我将数据类型:“json”添加到AJAX请求之前,一切都很顺利。现在,每当我点击我的提交按钮,没有任何日志。这是我的PHP文件:

<?php
include 'dbcon.php';

if ( isset( $_POST['text_login_username'], $_POST['text_login_password'] ) ) {
    $loginResult = array();
    $dbcon = getConnection();
    $userName = mysqli_real_escape_string( $dbcon, $_POST['text_login_username'] );
    $password = mysqli_real_escape_string( $dbcon, $_POST['text_login_password'] );
    $loginQuery = "SELECT * FROM userData WHERE userName='$userName' AND userPassword='$password'";
    $queryResult = mysqli_query( $dbcon, $loginQuery );
    $legalRows = mysqli_num_rows( $result );
    if ( $legalRows == 1 ) {
       $loginResult['allClear']=0;  
    } else {
       $loginResult['allClear']=1;
    }

    echo json_encode( $loginResult );
}
?>
我可以确保正确设置了指向文件、帖子等的正确链接,因为在我尝试发送json_encode变量之前,这是有效的。任何帮助都将不胜感激

谢谢

~z~嘶嘶作响

更新:我在我的AJAX调用中添加了一个错误:设置,并在我提交时运行

更新:查看我的答案。这就是我的解决方案。

检查此代码

demo.php

return.php


试试这个。确保JS中的数据变量具有JS对象的正确语法。关于JSON对象的更多信息


你能试试这个吗?添加到服务器脚本中

我的json_编码也没有返回任何东西,直到我在升级PHP版本时添加了它。这与只在UTF-8上工作的json_编码有关

mysqli_query($dbcon, "SET NAMES utf8"); 
我还将此添加到脚本的顶部

mb_internal_encoding("UTF-8");

1.-在PHP代码中使用标题内容类型:

header('Content-type: application/json');
2.-在jQuery ajax代码中使用内容类型标题:

contentType:'application/json; charset=utf-8'
3.-检查您的ajax jQuery代码是POST还是GET默认值:GET:

type: "post"
4.-在PHP中打印JSON:

if( array_key_exists("text_login_username",$_POST) AND array_key_exists("text_login_password",$_POST) )
{
    header('Content-type: application/json');
    /**
    *   Create link
    */
    $link = getConnection(); /* user function */
    /**
    * Default value for result
    */
    $result = array(
        "allClear"  =>  1
    );
    /**
    *   first arg is connection
    *   mysqli_real_escape_string ( mysqli $link , string $escapestr )
    */
    $username = mysqli_real_escape_string( $link , $_POST["text_login_username"] );
    $password = mysqli_real_escape_string( $link , $_POST["text_login_password"] );

    /**
    *   Select "1" is best way with LIMIT; you dont need all fields... ¬¬ bad way...
    **/
    $source = mysqli_query( $link , "SELECT 1 FROM userData WHERE userData.userName='$username' AND userData.userPassword='$password' LIMIT 1" , MYSQLI_STORE_RESULT  );
    /**
    * count
    */
    if( mysqli_num_rows( $source ) == 1 )
    {
        $result["allClear"] = 0;
    }
    /**
    *   print json
    */
    echo json_encode( $result );
    /**
    *   prevent others prints
    */
    exit;
}
5.-用于验证阵列中是否存在密钥

bool array_key_exists( mixed $key , array $search )
6.-使用此$.ajax代码:

contentType:'application/json; charset=utf-8'

祝你好运

这个解决方案很奇怪。mysqli_num_行出现问题。我只是这样做了

$legalRows=$queryResult->num_rows;

它很好用。谢谢你的回答。我肯定学到了一些我将要实施的新东西

纯文本密码:您是否尝试过标题'Content-type:application/json'@cryocide不,我没有,我到底把它放在哪里?根据您使用的浏览器,可能需要包含具有特定配置的标头,有时IE需要它。您是否使用伪变量单独运行php文件,以确保将真正的json返回给客户端?或者您是否看到控制台上返回了良好的json?你会考虑把Ajax添加到Ajax中去看看会发生什么吗?谢谢你这么做,我一定要看看。很棒的代码,但是在html文件中,它调用response.php,答案告诉我们调用它return.php——我花了几秒钟才弄明白它为什么不起作用。您的示例说创建两个文件return.php和demo.html,但是在demo.html中,ajax代码调用response.php`$.ajax{type:POST,dataType:json,url:response.php,data:data,success:functiondata`@Adam对不起,这是我的错误。现在我可以修改名为demo.php的文件名。现在请检查您的sel。谢谢请显示数据变量在JS代码中的样子。您的数据变量不在格式正确。它需要是一个JSON对象。你是说我的PHP变量还是Javascript变量?嗯,这似乎是正确的,当我console.logdata时,我得到了对象{text_login_用户名:ru毯fizz,text_login_密码:test}这应该也能正常工作吗?mysqli_num_rows$queryResult;
if( array_key_exists("text_login_username",$_POST) AND array_key_exists("text_login_password",$_POST) )
{
    header('Content-type: application/json');
    /**
    *   Create link
    */
    $link = getConnection(); /* user function */
    /**
    * Default value for result
    */
    $result = array(
        "allClear"  =>  1
    );
    /**
    *   first arg is connection
    *   mysqli_real_escape_string ( mysqli $link , string $escapestr )
    */
    $username = mysqli_real_escape_string( $link , $_POST["text_login_username"] );
    $password = mysqli_real_escape_string( $link , $_POST["text_login_password"] );

    /**
    *   Select "1" is best way with LIMIT; you dont need all fields... ¬¬ bad way...
    **/
    $source = mysqli_query( $link , "SELECT 1 FROM userData WHERE userData.userName='$username' AND userData.userPassword='$password' LIMIT 1" , MYSQLI_STORE_RESULT  );
    /**
    * count
    */
    if( mysqli_num_rows( $source ) == 1 )
    {
        $result["allClear"] = 0;
    }
    /**
    *   print json
    */
    echo json_encode( $result );
    /**
    *   prevent others prints
    */
    exit;
}
bool array_key_exists( mixed $key , array $search )
$.ajax({
    url: "json.php",
    type: "post",
    data: {
        text_login_username  : "xxxx",
        text_login_password  : "xxx"
    },
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(response)
    {
        console.log(response);
    }
});
$legalRows=$queryResult->num_rows;