草庐IT

php - JSON 输入意外结束 - Uncaught SyntaxError

coder 2024-05-05 原文

各位。我有一个 AJAX 调用返回标题中提到的错误。我相信这是导致错误的行:var obj = jQuery.parseJSON(data);也许我构建错误userData .

这是我的 jQuery:

var userData = 'email=' + email + '&password=' + password; 

$.ajax({
    type: 'POST',
    url: './api/getInfo.php',
    data: userData,
    success: function(data){
        var obj = jQuery.parseJSON(data); 

        $('#name').html(obj.firstName + ' ' + obj.lastName);
        ...
    },
    error: function(){
        alert('ERROR');
    }
});

这是 getInfo.php:

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
     $email = prepareInput($_POST['email']);
     $password = prepareInput($_POST['password']);

     $stmt = $connection->conn->prepare('SELECT firstName,lastName,... FROM tb_users WHERE email = ? AND password = ?');
     $stmt->bind_param('ss',$email,$password);

     $stmt->execute();

     $result = $stmt->get_result();

     $obj = $result->fetch_assoc();

     echo json_encode($obj);
}

如果我做错了什么,有人可以告诉我吗?

更新

function prepareInput($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);

    return $data;
}

即使 $obj 从 PHP 传递的数据为空包含值(我通过回应它们来检查)所以这一定是 echo json_encode($obj); 的问题声明。

解决方案

我终于找到了答案 - Link 。这是编码问题。如果某些字符串不是 UTF-8 json_encode()将返回空字符串,因此要处理此问题,您需要将这些字符串转换为 UTF-8。

最佳答案

既然你提到:成功函数不接收任何数据

似乎服务器响应为空,因为 (a) 凭据错误或 (b) PHP 中存在错误并且您的代码从未到达 echo 行。

在 PHP 中添加一些错误处理/确认,并确保 $obj 在返回之前有值。

try {
  // ... sql code

  if ( $obj && is_array( $obj ) ) {
    echo json_encode( $obj );
  } else {
    echo json_encode( array( 'error' => 'wrong username or password' ) );
  }
} catch (Exception $ex) {
  echo json_encode( array( 'error' => $ex->getMessage() ) );
}

更新;调试SQL的注意事项

测试 SQL:

  1. 作为条件 (method == POST) 的第一行添加 echo json_encode(array('resp'=>'test')); exit; 并运行 Ajax 代码。 您的 console.log() 现在应该显示 {resp:test} JSON 对象。这样您就知道您的 ajax 调用实际上到达了带有 SQL 的部分。如果您仍然没有得到任何输出,那么您的代码中有其他问题...

  2. 首先使用硬编码的 SQL:只需在 WHERE 中输入电子邮件/密码,您就会知道会得到结果。不要使用 ->bind_param()$_POST 数据,只需执行一个普通的 SQL 语句并查看 AJAX 是否返回值。

  3. 如果 Ajax 现在可以工作,则修改硬编码的 SQL 以将静态电子邮件/密码字符串移动到 bind_param() 中。现在仍然没有使用 $_POST 数据,但是我们检查 bind_param 方法是否有效。再次检查 Ajax 是否仍在工作。

  4. 如果仍然有效,则在 bind_param() 调用中使用直接 $_POST 数据,例如 ->bind_param('ss', $_POST['email'], $_POST['password'] ) - 如果这有效,那么您就知道 prepareInput() 函数有问题。

在测试每个步骤时,您应该快速找出哪个部分不起作用。

关于php - JSON 输入意外结束 - Uncaught SyntaxError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39203795/

有关php - JSON 输入意外结束 - Uncaught SyntaxError的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  4. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  5. ruby - 鸭子输入字符串、符号和数组的优雅方式? - 2

    这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby​​。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac

  6. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  7. ruby - 如果满足给定条件,则结束 ruby​​ 程序 - 2

    基本上,我只是试图在满足特定条件时停止程序运行其余行。unlessraw_information.firstputs"Noresultswerereturnedforthatquery"breakend然而,在程序运行之前我得到了这个错误:Invalidbreakcompileerror(SyntaxError)执行此操作的正确方法是什么? 最佳答案 abort("Noresultswerereturnedforthatquery")unlesscondition或unlessconditionabort("Noresultswer

  8. ruby-on-rails - Rails 渲染带有驼峰命名法的 json 对象 - 2

    我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'

  9. ruby-on-rails - Ruby/Rails 中的夏令时开始和结束日期 - 2

    我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够

  10. ruby - 使用 JSON gem 将自定义对象转换为 JSON - 2

    我正在学习如何使用JSONgem解析和生成JSON。我可以轻松地创建数据哈希并将其生成为JSON;但是,在获取一个类的实例(例如Person实例)并将其所有实例变量放入哈希中以转换为JSON时,我脑袋放屁。这是我遇到问题的例子:require"json"classPersondefinitialize(name,age,address)@name=name@age=age@address=addressenddefto_jsonendendp=Person.new('JohnDoe',46,"123ElmStreet")p.to_json我想创建一个.to_json方法,这样我就可以获

随机推荐