我有一个针对MVC的ajax调用,它调用一个函数,在完成之前调用其他5个函数。每个函数都有一个if / else,如果失败则返回自己的错误消息,并显示错误消息,原始页面需要重新加载。但如果没有错误,则ajax调用应更新到完整页面。我知道成功函数中的一个简单的if / else语句将实现这一点,并且我在每个函数的失败中放入了相同的简单错误变量。但我无法将变量拉出成功函数响应,以便在成功函数if / else语句中使用。我的ajax调用在下面,我在服务器端运行php。
function sendstuff(data) {
$.ajax({
type:"POST",
datatype:'json',
cache: false,
data: data,
url:"/Orders/getitem/",
success:function(resp, status, jxr){
alert(resp);
if(resp.fail == "error") {
// error handling, show data.message or what you want.
location.reload(true);
} else {
// same as above but with success
$('body').html(resp);
}
});
return false;
};
以下是从
发送错误的位置if ( $status != 201 ) {
// $this->Flash->error(__('There was an error with the entry. Please, try again.'));
$ajaxerr['fail'] = 'error';
echo json_encode($ajaxerr);
die("Error: call to URL $url failed with status $status, response $result, curl_error " . curl_error($ch) . ", curl_errno " . curl_errno($ch));
这是响应中的最新内容,因为它每次都会加载成功函数的一部分。
{"fail":"error"}Error: call to URL https://api.blank failed with status 400, response {"name":"VALIDATION_ERROR","details":[{"field":"blank.fng_ints[0].ct_issue","issue":"date cannot be in the past."}],"message":"Invalid request. See details.","information_link":"https://developer.api/#VALIDATION_ERROR","debug_id":"24f4"}, curl_error , curl_errno 0
我可以看到它传递var但是我无法将其拉出来用于成功函数if / else语句。任何帮助表示赞赏。
答案 0 :(得分:1)
您的服务器响应不是有效的JSON响应,因此无法正确解析,因此 - 无法获得成功消息
将您的服务器更改为
if ( $status != 201 ) {
// $this->Flash->error(__('There was an error with the entry. Please, try again.'));
$ajaxerr['fail'] = 'error';
$ajaxerr['msg'] = "Error: call to URL $url failed with status $status, response $result, curl_error " . curl_error($ch) . ", curl_errno " . curl_errno($ch);
echo json_encode($ajaxerr);
exit;
}
然后它会解析为
{
"fail":"error",
"msg":"..."
}
无论如何,如果您遇到服务器错误,最好从服务器发送一条真实的错误消息(使用HTTP状态> = 400),然后在error
回调中的jQuery中捕获它,而不是{ {1}}回调
success
答案 1 :(得分:0)
$.ajax( {
...
success: function() {
//handle success request
},
error: function() {
//handle failed requests
}
})
调用将字符串输出放在json结构之外的响应中,这会导致Ajax函数无法解析响应。
考虑这样做:
die();
答案 2 :(得分:0)
在您的代码中,您的响应不是json对象,因为&#39; die&#39;呼叫产生输出。所以在没有任何参数的情况下调用 Type safety: A generic array of Class<? extends MyInterface> is created for a varargs parameter
。
答案 3 :(得分:0)
我解决了这个问题。所有我必须要做的就是把它变成一个var而且我删除了所有的烦恼,我觉得我和生活中浪费了几个小时的白痴,但它是固定的。谢谢大家:)特别是Yaron U.