[英]Ajax success event not working
我有一个注册表单,正在使用$.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 请求的成功回调中?
结果可能不是 JSON 格式,因此当 jQuery 尝试解析它时,它失败了。 您可以使用error:
回调函数捕获错误。
无论如何,您似乎不需要该函数中的 JSON,因此您也可以取出dataType: 'json'
行。
虽然问题已经解决了,我还是加了这个,希望能帮到其他人。
我犯了一个错误,试图直接使用这样的函数(成功: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;
}
如果您不使用匿名函数作为包装器,即使 Web 服务返回异常,也会调用 OnSuccess。
我尝试删除 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 ...
}
});
在 PHP 文件中生成 JSON 格式的数据之前,请确保您没有打印(回显或打印)任何文本/数据。 这可以解释您得到 -sucessfull 200 OK- 但您的成功事件在您的 javascript 中仍然失败。 您可以通过检查萤火虫中 POST submit1.php 的“网络 - 答案”部分来验证您的脚本正在接收什么。
在您的success
回调中放置一个alert()
以确保它被完全调用。
如果不是,那只是因为请求根本没有成功,即使您设法访问了服务器。 合理的原因可能是超时到期,或者您的 php 代码中的某些内容引发了异常。
如果您还没有安装 firefox 的 firebug 插件,请检查 AJAX 回调。 您将能够看到响应,以及它是否收到成功的 (200 OK) 响应。 您还可以在complete
回调中放置另一个alert()
,它绝对应该被调用。
我有同样的问题。 发生这种情况是因为javascript
期望在返回数据时使用json
数据类型。 但是如果您在 php 中使用 echo 或 print 会发生这种情况。 如果您在php
使用echo
函数返回数据,只需删除dataType : "json"
工作得很好。
我正在返回有效的 JSON,在我的“完整”回调中得到 200 的响应,并且可以在 chrome 网络控制台中看到它......但我没有指定
dataType: "json"
一旦我这样做了,与“接受的答案”不同,实际上解决了问题。
您必须同时声明成功和错误回调。 添加
error: function(err) {...}
应该解决问题
我正在使用 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>";
?>
我使用 ajax 函数从 Magento 恢复用户密码时遇到了这个问题。 成功事件没有被触发,然后我意识到有两个错误:
因此,每次我尝试使用 json_eoncde() 对返回的数组进行编码时,该函数都无法正常工作,因为其索引之一具有非 utf 字符,其中大多数是巴西葡萄牙语单词的重音。
我试图从控制器返回字符串,但为什么控制返回到错误块的 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);
}
});
我在查询不返回成功响应的控制器时遇到了同样的问题,当修改我的控制器以返回成功消息时问题得到解决。 注意使用 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()
}
这对我有用
我遇到了同样的问题,我以这种方式解决了它:我的 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);
现在我的成功工作。 附注。 对不起,如果有什么问题,但这是我在这个论坛上的第一条评论:)
在我的情况下,错误是在服务器端,因此它返回一个 html
wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");
以这种方式添加“错误”回调(就像“成功”一样):
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
},
error: function(jqXhr, textStatus, errorMessage){
console.log("Error: ", errorMessage);
}
});
所以,就我而言,我在控制台中看到:
Error: SyntaxError: Unexpected end of JSON input
at parse (<anonymous>), ..., etc.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.