我有一个php文件,从下拉列表中选择一个项目代码,可以获取项目的最后价格和描述。
问题:
当请求在前端发出时,请求被发送到处理页面,处理页面返回JSON数据。
它在我的本地Windows Server上运行良好。迁移到Live Windows Server后,它会抛出如下错误:
SyntaxError: JSON.parse: unexpected character at line 1 column 9 of the JSON data var data4=JSON.parse(data4);
当我在Firefox浏览器上使用firebug检查元素时,我发现处理脚本显示200K OK 581ms
,表明处理脚本没问题。但是下面是这个错误:
SyntaxError: JSON.parse: unexpected character at line 1 column 9 of the JSON data
var data4=JSON.parse(data4);
当我进一步检查时,处理脚本没有问题,在响应和HTML TAB上,显示预期结果,该结果应该在请求时显示(前端)页面。
我需要帮助弄清楚为什么会这样。请找到以下页面。
前端页面脚本:
<script type="text/javascript" src="includes/scripts/newJquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("select.partno").change(function(){
var selectedCustomer = $(".partno option:selected").val();
$.ajax({type: "POST",url:"process-grpid.php",data:{custid:selectedCustomer}}).done(function(data4){
var data4=JSON.parse(data4);
//using php-mysql before
if(data4.sta == 0){
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
}else{
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
}
});
});
});
</script>
Process-grpid.php脚本:
<?php
if(isset($_POST["custid"])){
include 'includes/session.php';
include 'includes/db_connection.php';
include 'includes/functions.php';
$partid = $_POST["custid"];
if($partid !== 'Select PartNo'){
$gets = "SELECT * FROM tab_stock WHERE itemName='".$partid."'";
$get = mysqli_query($connection,$gets);
$row = mysqli_fetch_array($get);
$desc = $row['description'];
$lprice = $row['Rate'];
if($partid=='N/A'){
$res["sta"]=0;
$res["ref"]="<input type='text' class='desc' name='descr' size='50' required='required'/>";
$res["lprice"]="<input type='text' id='puch' name='lastpur' required='required'/>";
}else{
$res["sta"]=1;
$res["ref"]="<input type='text' value='$desc' class='desc' name='descr' size='50' readonly='readonly' required='required'/>";
$res["lprice"]="<input type='text' id='puch' name='lastpur' value='$lprice' readonly='readonly' required='required'/>";
}
echo json_encode($res);
}
}
答案 0 :(得分:0)
控制台返回200OK的一个原因是因为请求的服务器在那里,但它期望的响应(JSON)无效。
您也没有在ajax请求中指定dataType:'json'
,它告诉您期望json数据而不仅仅是纯文本。
答案 1 :(得分:0)
您似乎在两次声明data4,一次在函数def function(data4)
中,然后再在var data4=...
。如果您使用单独的变量名称,它应该工作。避免在同一个函数中在两个不同的上下文中重用变量名是个好主意。
$.ajax({type: "POST",
url:"process-grpid.php",
data:
{
custid:selectedCustomer
}
}).done(function(response){
var data4 = JSON.parse(response);
if(data4.sta == 0){
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
}else{
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
}
});
要考虑的一件事是JS本身就能理解JSON。意思是,您不需要使用JSON.parse。你只需告诉它期待JSON dataType: 'json',
。我会使用success:
代替done()
。 done()
可能无法正常工作,因为它并不关心成功。我也会使用truthy if语句。你的if和else语句也做同样的事情。其中一个似乎是不必要的。最后,添加一个错误回调。
$.ajax({
type: "POST",
url: "process-grpid.php",
dataType: 'json', // expected dataType of the response
data: {
custid: selectedCustomer
},
success: function(response) {
var data4 = response;
if (data4.someValueThatShouldBePresent) {
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
} else {
$("#desc").html(data4.ref);
$("#purch").html(data4.lprice);
}
},
error: function(request, error) {
// This callback will trigger on an unsuccessful request
alert('Unable to connect, try again. ');
}
});