Jsonp 回调问题:输入文本未定义
Posted
技术标签:
【中文标题】Jsonp 回调问题:输入文本未定义【英文标题】:Jsonp callback issue: input text is undefined 【发布时间】:2013-07-14 10:13:30 【问题描述】:根据同源策略,我不能使用常规 json 进行 ajax 调用,所以我改用 jsonp。 我有一个简单的输入字段,类名是“newCaller”。 在我的 js 文件中
$(document).on("blur", ".newCaller", function()
var name = $(this).val();
var tel = $(this).siblings(".tel").text();
//console.log(name+tel);
$.ajax(
type: 'GET',
url: 'xxx.xxx.com/phpFunc.php',
data: ( 'name' : name, 'tel' : tel ),
dataType: 'jsonp',
//I tried success instead of jsonpCallback as well
jsonpCallback: function(data)
console.log(data);
);
);
这里是php:
<?php
$name = $_GET['name'];
$tel = $_GET['tel'];
echo $name.$tel;
?>
当 ajax 函数被触发时,该字段的值是未定义的。例如,我在文本字段中输入“测试”并触发该功能,请参见下图(对不起,黑线,隐私政策)
我用success回调,返回几乎一样的东西,“xxx is not defined”。 有人可以告诉我如何修复它吗?谢谢!
【问题讨论】:
检查 JSON 语法。您从 PHP 文件返回的不是 JSON。 你没有在php页面中将值转换为json。你需要给$arr=array($name=>$tel);json_encode($arr); 【参考方案1】:问题主要在服务器端,因为该脚本不足以支持JSONP。
必须output valid JSON:
json_encode($name . $tel);
并包括填充(callback
):
echo $_GET['callback'] . '(' . json_encode($name . $tel) . ');';
而且,您需要将 jsonCallback
改回 success
。
【讨论】:
太棒了!这行得通!你是我的英雄!我得到“资源解释为脚本,但使用 MIME 类型文本/html 传输:”。这是什么意思? @nich 啊。您必须指定Content-Type
:header('Content-type: application/javascript');
。在echo
之前添加。
再次感谢,我可以再问你一个问题。如何将 $tel 和 $name 提取回我的 js。在我的 php 结束时,我会回显 $name 和 $tel。我试过 $name=$_GET['callback'] 。 '(' . json_encode($name) . ');';和 $tel=$_GET['callback'] 。 '(' . json_encode($name) . ');';.但它不会工作。你能帮我一把吗?
@nich 您必须将它们组合在一起输出为一个 JSON 值:json_encode(array($name, $tel))
、data[0]
和 data[1]
。关联数组也可以,但在 JSON 中编码为 Object
s:array("name" => $name, "tel" => $tel)
与 data.name
和 data.tel
。【参考方案2】:
你没有在php页面phpFunc.php.u中将值转换为json需要给
$arr=array($name=>$tel);
json_encode($arr);
因为你是以 json 格式做的..所以你只需要以 json 格式获取数据。但是你以普通文本格式发送所以显示 mime/type 错误
要检查确切的错误试试这个
$(document).on("blur", ".newCaller", function()
var name = $(this).val();
var tel = $(this).siblings(".tel").text();
//console.log(name+tel);
$.ajax(
type: 'GET',
url: 'xxx.xxx.com/phpFunc.php',
data: ( 'name' : name, 'tel' : tel ),
error: function(xhr, textStatus, errorThrown)
alert(errorThrown);
//alert(xhr.responseText);
return false;
,
dataType: 'jsonp',
//I tried success instead of jsonpCallback as well
success: function(data)
console.log(data);
);
);
【讨论】:
感谢您的帮助。我将这两行添加到我的代码中。然后我执行“echo $arr;”。我重新运行我的代码,但仍然得到“资源解释为脚本,但使用 MIME 类型文本/html 传输:”。我做错了什么? ru 在 phpFunc.php 页面中进行 json 编码,并让 jsonpCallback 成功以上是关于Jsonp 回调问题:输入文本未定义的主要内容,如果未能解决你的问题,请参考以下文章