我有一个简单的PHP脚本,当它从AJAX调用中正确执行时,结束于:
echo "ok";
然而,当我尝试解析这些信息时,它告诉我它不是一个字符串。
在下面的示例中,结果为:alert('error: Type Mismatch');
为什么JQuery不能将php echo作为字符串读取?
$.ajax({
url: '/ajax/actions/imageUpload.php?act_id=<?=$act_id?>',
type: 'POST',
success: function (response) {
if(typeof response == typeof 'string'){
if( response == 'ok')
alert('all is good');
else
alert('error:');
} else {
alert('error: Type Mismatch');
}
}
});
下面的屏幕截图显示答案是正确的,只是说“好”&#39;
答案 0 :(得分:1)
当我正在阅读jquery Api Doc时,我知道你可以根据你在$中传递的数据类型(如果你这样做)获得一个“字符串”或其他内容作为response
。 ajax对象。否则它将基于一些自己的逻辑从jQuery中得到假设。
在我看来,你应该避免每一个假设,并根据你发送的响应格式明确传递dataType。
所以,
如果您将response.php
设置为
echo "ok";
你应该在你的ajax调用中设置dataType“text”:
$.ajax({
url: 'imageUpload.php',
type: 'POST',
dataType: "text",
...
并获得回复:
if(typeof response == "string")
{
console.info(response);
...
或者
如果您将response.php
设置为返回
echo json_encode(array("data" => "ok"));
你应该设置dataType“json”:
$.ajax({
url: 'imageUpload.php',
type: 'POST',
dataType: "json",
...
并获得回复:
if(typeof response == "object")
{
console.info(response.data);
...
答案 1 :(得分:0)
$.ajax({
url: '/ajax/actions/imageUpload.php?act_id=<?=$act_id?>',
type: 'POST',
success: function (response) {
if (typeof response === "string"){
if (response == 'ok')
alert('all is good');
else
alert('error:');
} else {
alert('error: Type Mismatch');
}
}
});
答案 2 :(得分:0)
以另一种方式行事:
在你的php脚本中回显一个JSON:json_encode("ok");
在AJAX中指定dataType: "json"
并添加事件:
complete: function(jsondata, stat)
{
if(stat == "success")
alert( $.parseJSON( jsondata.responseText ) );
}
答案 3 :(得分:0)
响应不是字符串类型,它是PlainObject对象。
success
Type: Function( PlainObject data, String textStatus, jqXHR jqXHR )
typeof response == 'object' // true
试试这个:
$.ajax({
url: '/ajax/actions/imageUpload.php?act_id=<?=$act_id?>',
type: 'POST',
dataType: "text",
success: function (response) {
if( response == 'ok')
alert('all is good');
else
alert('error:');
}
});