我正在使用 jsonp 从 Web 服务器向我的应用程序(内置 sencha)请求数据。该请求有一个名为“sokt”的动态参数。有时参数有瑞典字符(å、ä、ö),有时没有。
只要没有瑞典字符,服务器就会返回预期的结果:例如: http ://mywebsite.se/jsonnew.php?sokt=test&_dc=1370095960312&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback31
但如果请求中有瑞典语字符,则服务器不返回任何内容。例子:
http://mywebsite.se/jsonnew.php?sokt =enastående&_dc=1370096101366&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback39
但是,如果我手动将请求 enastående 编码为 enast%E5ende,我会得到预期的结果。
所以,总而言之,问题似乎是来自 jsonp 的请求没有对查询字符串进行 url 编码,它发送了格式化响应的 php 脚本不接受的 unicode 字符串(它有一个 utf_8-header)。如果这确实是它不起作用的原因,我不确定,我将如何解决这个问题?
编辑代码:
这是我的要求:
Ext.getStore('storen').setProxy({ type: 'jsonp', url: 'http://mywebsite.se/synonymer/jsonnew.php?sokt=' + param}).load()
这是 php 脚本:
<?php
header('Content-Type: text/javascript; charset=utf8');
include("config.php");
$dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sokt = $_GET['sokt'];
$stmt = $dbh->prepare("SELECT * FROM table WHERE w1 = :sokt");
$stmt->bindParam(':sokt', $sokt);
$stmt->execute();
$output = array();
while ( $row = $stmt->fetch() ) {
$output[] = array("key" => utf8_encode($row['w2']));
}
$callback = $_REQUEST['callback'];
// Create the output object.
//start output
if ($callback) {
echo $callback . '(' . json_encode($output) . ');';
} else {
echo json_encode($output);
}
?>