各位。我有一个 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:
作为条件 (method == POST) 的第一行添加 echo json_encode(array('resp'=>'test')); exit; 并运行 Ajax 代码。
您的 console.log() 现在应该显示 {resp:test} JSON 对象。这样您就知道您的 ajax 调用实际上到达了带有 SQL 的部分。如果您仍然没有得到任何输出,那么您的代码中有其他问题...
首先使用硬编码的 SQL:只需在 WHERE 中输入电子邮件/密码,您就会知道会得到结果。不要使用 ->bind_param() 或 $_POST 数据,只需执行一个普通的 SQL 语句并查看 AJAX 是否返回值。
如果 Ajax 现在可以工作,则修改硬编码的 SQL 以将静态电子邮件/密码字符串移动到 bind_param() 中。现在仍然没有使用 $_POST 数据,但是我们检查 bind_param 方法是否有效。再次检查 Ajax 是否仍在工作。
如果仍然有效,则在 bind_param() 调用中使用直接 $_POST 数据,例如 ->bind_param('ss', $_POST['email'], $_POST['password'] ) - 如果这有效,那么您就知道 prepareInput() 函数有问题。
在测试每个步骤时,您应该快速找出哪个部分不起作用。
关于php - JSON 输入意外结束 - Uncaught SyntaxError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39203795/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
我有一个非常简单的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":
我正在使用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("
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
基本上,我只是试图在满足特定条件时停止程序运行其余行。unlessraw_information.firstputs"Noresultswerereturnedforthatquery"breakend然而,在程序运行之前我得到了这个错误:Invalidbreakcompileerror(SyntaxError)执行此操作的正确方法是什么? 最佳答案 abort("Noresultswerereturnedforthatquery")unlesscondition或unlessconditionabort("Noresultswer
我在一个简单的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'
我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够
我正在学习如何使用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方法,这样我就可以获