我一直在尝试使用chrome和firefox调试ajax调用。我在这两方面都是新手。当使用chrome进行debbuging时,我得到了一个ajax响应,最后两个参数(jqXHR, textStatus, errorThrown)
为空,第一个是xhr状态0。我有时会说,因为我有时会得到xhr状态200,而参数textStatus, errorThrown
正在打印解析错误和意外字符"<"。我一直在查看我的php代码现在是因为我一直在做一个测试:对每个php代码进行注释,并返回php从ajax调用中获得的相同$_POST['json']
,我得到了相同的错误。我一直在看我的json,它的格式很好。我被所有这些错误和我不太理解的令人困惑的调试工具弄糊涂了,我转到了firefox和firebug,在那里我得到了另一个不同的消息:"未捕获的异常:内存不足"我一直在阅读其他一些开发人员提出的相同问题,并尝试了公认的答案,但我仍然找不到问题所在,这就是为什么我在这里发布我的代码,希望有人能提供帮助。非常感谢!
html代码:
<input type="submit" data-effect="mfp-zoom-out" value='Submit' onClick="setTypeAdvanced()" style= "
position: relative;
top: -152px;
left: 129px;
" />
index.js:中的jscript代码
function setTypeAdvanced(){
var advancedFormVars = {};
/**SHOW*/
if(document.getElementById('OfferID').checked == true){
advancedFormVars['checkbox1'] = document.getElementById('OfferID').value;
}
if(document.getElementById('offerName').checked == true){
advancedFormVars['checkbox2'] =document.getElementById('offerName').value;
}
if(document.getElementById('campaignID').checked == true){
advancedFormVars['checkbox3'] = document.getElementById('campaignID').value;
}
if(document.getElementById('campaignName').checked == true){
advancedFormVars['checkbox4'] = document.getElementById('campaignName').value;
}
if(document.getElementById('installs').checked == true){
advancedFormVars['checkbox5'] = document.getElementById('installs').value;
}
if(document.getElementById('revenue').checked == true){
advancedFormVars['checkbox6'] = document.getElementById('revenue').value;
}
/** FILTERS */
if(document.getElementById('offerIDFilt').checked == true){
advancedFormVars['checkbox7'] = document.getElementById('offerIDFilt').value;
}
if(document.getElementById('publisherIDFilt').checked == true){
advancedFormVars['checkbox8'] = document.getElementById('publisherIDFilt').value;
}
if(document.getElementById('publisherIDTextVal').value.length >'0'){
advancedFormVars['checkbox9'] = document.getElementById('publisherIDTextVal').value;
publisherIDTextVal = document.getElementById('publisherIDTextVal').value;
}
if(document.getElementById('offIDTextVal').value.length > '0'){
advancedFormVars['checkbox10'] = document.getElementById('offIDTextVal').value;
}
/**GROUP BY*/
if(document.getElementById('dates').checked == true){
advancedFormVars['checkbox11'] = document.getElementById('dates').value;
}
if(document.getElementById('geos').checked == true){
advancedFormVars['checkbox12'] = document.getElementById('geos').value;
}
if(document.getElementById('browsers').checked == true){//arreglar no coge checked, coge objeto html
advancedFormVars['checkbox13']= document.getElementById('browsers').value;
}
if(document.getElementById('oS').checked == true){//arreglar coge undefined
advancedFormVars['checkbox14'] = document.getElementById('oS').value;
}
/**ORDER BY*/
if(document.getElementById('installsGroupBy').checked == true){
advancedFormVars['checkbox15']= document.getElementById('installsGroupBy').value;
}
if(document.getElementById('revenueGroupBy').checked == true){
advancedFormVars['checkbox16']= document.getElementById('revenueGroupBy').value;
}
advancedFormVars['none']= (typeof none=== 'undefined') ? 'default' : none;
advancedFormVars['ASC']= (typeof ASC === 'undefined') ? 'default' : ASC;
advancedFormVars['DESC']= (typeof DESC === 'undefined') ? 'default' : DESC;
loadFormAdvanced(advancedFormVars);
}
function loadFormAdvanced(advancedFormVars){
var json = JSON.stringify(advancedFormVars);
$.ajax({
url : 'AL_loadForm.php',
type : 'POST',
data : {
json:json
},
dataType:'json',
success : function(data) {
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error '+errorThrown);
alert('status '+textStatus);
alert('xhr status '+jqXHR.status);
}
});
}
编辑以添加我的php代码:
<?php
if($_POST){
if($_POST['json']){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
这是我的json:
{"checkbox1":"OfferID","checkbox2":"Offer Name","checkbox3":"CampaignID","checkbox4":"CampaignName","checkbox5":"Installs","checkbox6":"Revenue","checkbox7":"OfferID","checkbox8":"PublisherID","checkbox9":"some publisher","checkbox10":"some offer","checkbox12":"Geos","checkbox15":"Installs","none":"default","ASC":"default","DESC":"default"}
在ajax调用中发送之前,它已经从控制台日志中复制/粘贴:
var json = JSON.stringify(advancedFormVars);
console.log(json);
$.ajax({
url : 'AL_loadForm.php',
type : 'POST',
data : {
json:json
},
dataType:'json',
success : function(data) {
alert(data);
单击submit
按钮时,您正在调用不带参数的setTypeAdvanced
。该函数构建一个名为advancedFormVars
的对象,并调用loadFormAdvanced(advancedFormVars)
。在stringify
变量之后,将其传递给AL_loadForm.php
的AJAX POST请求。您将收到0
作为状态代码,这可能意味着许多不同的东西(请参阅此部分)。基本上,您需要检查服务器的日志以了解发生了什么。它收到请求了吗?如果是,是否存在错误?此外,您需要检查浏览器控制台的"网络"选项卡,看看您收到了什么响应。<
是一个很大的线索,这可能意味着你的服务器发回了一些HTML,这些HTML可能太大,可能是因为响应数据集太大,或者服务器没有很好地处理帖子。
编辑:
此PHP代码不正确:
<?php
if($_POST){
if($_POST['json']){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
我假设你想知道请求是否是post,如果是,那么检查它是否有'json'
元素,但$_POST
是true,即使它是get请求,因为它是一个空的array
,如果你没有'json'元素,$_POST['json']
将导致错误。修改如下:
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(isset($_POST['json'])){
echo json_encode($_POST['json']); //also tryed echo($_POST['json']);
}
}
?>
注意,您将其编码为JSON,然后想要alert
。您不应该alert
大型JSON字符串。请改用console.log
。