我有一个注册表单,正在使用$.ajax
提交。
这是我的AJAX请求:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
在我的 submit1.php 文件中,我检查数据库中是否存在字段电子邮件地址和用户名。 如果这些值存在没有页面刷新,我希望显示错误消息。
如何将此添加到我的AJAX请求的成功回调中?
答案 0 :(得分:354)
结果可能不是JSON格式,所以当jQuery尝试解析它时,它会失败。您可以使用error:
回调函数来捕获错误。
无论如何你似乎不需要JSON,所以你也可以取出dataType: 'json'
行。
答案 1 :(得分:16)
虽然问题已经解决,但我希望它能帮到其他人。
我犯了一个错误,试图直接使用这样的函数(成功:OnSuccess(productID))。但是你必须首先传递一个匿名函数:
function callWebService(cartObject) {
$.ajax({
type: "POST",
url: "http://localhost/AspNetWebService.asmx/YourMethodName",
data: cartObject,
contentType: "application/x-www-form-urlencoded",
dataType: "html",
success: function () {
OnSuccess(cartObject.productID)
},
error: function () {
OnError(cartObject.productID)
},
complete: function () {
// Handle the complete event
alert("ajax completed " + cartObject.productID);
}
}); // end Ajax
return false;
}
如果不使用匿名函数作为包装器,即使webservice返回异常,也会调用OnSuccess。
答案 2 :(得分:14)
我尝试删除dataType行,但它对我不起作用。我通过使用“完整”而不是“成功”作为回调解决了这个问题。 IE中的成功回调仍然失败,但是因为我的脚本运行并完成,所以我只关心它。
$.ajax({
type: 'POST',
url: 'somescript.php',
data: someData,
complete: function(jqXHR) {
if(jqXHR.readyState === 4) {
... run some code ...
}
}
});
在jQuery 1.5中你也可以这样做。
var ajax = $.ajax({
type: 'POST',
url: 'somescript.php',
data: 'someData'
});
ajax.complete(function(jqXHR){
if(jqXHR.readyState === 4) {
... run some code ...
}
});
答案 3 :(得分:11)
在PHP文件中生成JSON格式化数据之前,请确保不打印(回显或打印)任何文本/数据。这可以解释你得到了一个200美元 - 但是你的成功事件仍然在你的javascript中失败了。您可以通过在firebug中查看POST submit1.php的“网络 - 答案”部分来验证脚本接收的内容。
答案 4 :(得分:4)
在alert()
回调中添加success
以确保其被调用。
如果不是,那只是因为请求根本没有成功,即使你设法命中服务器。合理的原因可能是超时到期,或者PHP代码中的某些内容引发异常。
为firefox安装firebug插件(如果还没有),并检查AJAX回调。您将能够看到响应,以及它是否收到成功(200 OK)响应。您还可以在alert()
回调中添加另一个complete
,这绝对应该被调用。
答案 5 :(得分:3)
我有同样的问题。这是因为javascript
期望json
数据类型返回数据。但如果您在php中使用echo或print,则会出现这种情况。如果您使用echo
中的php
函数来返回数据,只需删除dataType : "json"
即可。
答案 6 :(得分:1)
我正在返回有效的JSON,在我的“完整”回调中得到200的响应,并且可以在Chrome网络控制台中看到它...但是我没有指定
dataType: "json"
一旦我做了,不像“接受的答案”,实际上解决了这个问题。
答案 7 :(得分:1)
我有一个问题,使用ajax函数从Magento恢复用户密码。成功事件没有被解雇,然后我意识到有两个错误:
因此,每当我尝试使用json_eoncde()对返回的数组进行编码时,该函数就无法正常工作,因为其中一个索引具有非utf字符,其中大多数都是用巴西葡萄牙语单词强调的。
答案 8 :(得分:1)
我试图从控制器返回字符串,但为什么控制返回错误块而不是ajax
成功var sownum="aa";
$.ajax({
type : "POST",
contentType : 'application/json; charset=utf-8',
dataType : "JSON",
url : 'updateSowDetails.html?sownum=' + sownum,
success : function() {
alert("Wrong username");
},
error : function(request, status, error) {
var val = request.responseText;
alert("error"+val);
}
});
答案 9 :(得分:1)
查询不返回成功响应的控制器时,我遇到了同样的问题,修改了控制器以返回成功消息的问题得到解决。 注意使用Lavalite框架。 之前:
public function Activity($id)
{
$data=getData();
return
$this->response->title('title')
->layout('layout')
->data(compact('data'))
->view('view')
->output();
}
after code looks like:
try {
$attributes = $request->all();
//do something
return $this->response->message('')
->code(204)
->status('success')
->url('url'. $data->id)
->redirect();
} catch (Exception $e) {
return $this->response->message($e->getMessage())
->code(400)
->status('error')
->url('nothing Wrong')
->redirect()
}
这对我有用
答案 10 :(得分:0)
我正在使用XML将结果从服务器上的php返回到网页,我也有同样的行为。
在我的情况下,原因是,结束标记与开始标记不匹配。
<?php
....
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<result>
<status>$status</status>
<OPENING_TAG>$message</CLOSING_TAG>
</result>";
?>
答案 11 :(得分:0)
在我的情况下,错误是这是在服务器端,因此它返回一个HTML
wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");
答案 12 :(得分:0)
以这种方式添加“错误”回调(就像“成功”一样):
docker-compose up
所以,就我而言,我在控制台中看到了
docker-compose up --no-build
答案 13 :(得分:0)
我遇到了同样的问题,我用这种方法解决了它: 我的ajax:
event.preventDefault();
$.ajax('file.php', {
method: 'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({tab}),
success: function(php_response){
if (php_response == 'item')
{
console.log('it works');
}
}
})
好的。问题不在于json,而仅在于php响应。 以前:我的php响应是:
echo 'item';
现在:
$variable = 'item';
echo json.encode($variable);
现在我的工作成功了。 PS。抱歉,如果出现问题,这是我对该论坛的第一条评论:)
答案 14 :(得分:0)
必须同时声明Success和Error回调。添加
s
应该解决问题
答案 15 :(得分:-5)
success callback有两个参数:
success: function (data, textStatus) { }
还要确保submit1.php
设置正确的内容类型标头:application/json